簡體   English   中英

調用dll中的另一個函數會導致訪問沖突

[英]call to another function in a dll causes access violation

好吧,所以我開始意識到dll並不是最簡單的東西,我正在嘗試制作一個與VC6兼容的dll,我在VS2010中使用了一些代碼,但是試圖找出如何獲得該代碼代碼可用於VC6項目我發現了以下問題:

我對dll的調用如下所示

MyDll::connect(); 

當我嘗試運行一個使用此功能的程序時,它會很好地啟動,但是一旦進入函數調用即

VOID connect()
{
hello();    //0xC0000005: access violation
}

VOID hello()
{
    int i = 1;
}

拆卸看起來像這樣:

->  00000000   ???
    00000001   ???
    00000002   ???
    00000003   ???
    00000004   ???
    00000005   ???
    00000006   ???
    00000007   ???
    00000008   ???
    00000009   ???
    etc...

您沒有導出函數.....除非該函數被注冊為導出函數,否則不允許程序訪問dll中的函數。 為此,您應該像這樣制作原型

要在類內導出函數,此函數應為1-是公共成員。 2-成為靜態成員

class MyDll{
   public:
   static void connect();
}
//then redeclare it like this
#ifdef _cplusplus
extern "C"{
#endif
__declspec(dllexport) void  MyDll::connect(){
//TODO
}
#ifdef _cplusplus
}
#endif

對要導出的任何類成員函數執行此操作

這是一個例子

創建一個簡單的動態鏈接庫示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM