2015-11-11 57 views
-1

我正在嘗試創建一個DLL,並從C#應用程序調用該函數。c#dllImport無法解析的外部符號

我的代碼如下:

header.h

#define DllItem __declspec(dllimport) 
class DllItem Access 
{ 
public: 

    Access(); 
    ~Access(); 

    bool open(); 

} 

的.cpp

#include "header.h" 


void openTracker() 
{ 
    Access access; 

    access.open(); 
} 

C#

using System.Runtime.InteropServices; 

namespace CSharp 
{ 
    class Access 
    { 

     [DllImport("Access.dll", CallingConvention = CallingConvention.Cdecl)] 
     public static extern void openTracker(); 




     static void Main(string[] args) 
     { 
      openTracker(); 
     } 
    } 
} 

當我生成DLL,我得到無法解析的外部符號錯誤在__declspec(dllimport)上。我在功能中缺少什麼?

我跟着教程,所以可能犯了一些錯誤。這是正確的方式去做這件事嗎? 謝謝。

+0

您是否在dhc#項目中添加了dll作爲參考? –

+0

當您使用dllimport時,您承諾該類的*實現*位於另一個模塊中。也許你確實在另一個DLL中編寫了代碼並正確使用了dllexport,這似乎不太可能。如果你確實忘了告訴鏈接器它需要鏈接另一個DLL的導入庫。 –

+0

啊,我有一個x64 lib鏈接,當它應該是32.謝謝大家! – anti

回答

1

是你所有的代碼? Access :: open函數定義在哪裏?

Using dllimport and dllexport in C++ Classes

您必須提供在同一程序中所有這些成員的定義。否則,會生成鏈接器錯誤

我希望你會覺得它有幫助。

+0

如上所述,我愚蠢地有一個64位的鏈接,而不是32.謝謝你的鏈接,但絕對有幫助。 – anti