c – Robert Giesecke的非管理出口

我正在尝试从vb.net获取DllExport到非托管c工作.

我在Visual Studio 2012上使用Robert Giesecke’s Unmanaged Exports并试图遵循这个very helpful hints.我通过在* .cpp和* .h文件所在的目录中的后期构建操作来复制.Net项目中的dll.

我用dumpbin / EXPORTS Nugget.Discovery.dll检查了我的dll,它告诉我有导出:

File Type: DLL
Section contains the following exports for \Nugget.Discovery.dll
00000000 characteristics
52554A05 time date stamp Wed Oct 09 14:20:21 2013
    0.00 version
       0 ordinal base
       2 number of functions
       2 number of names
ordinal hint RVA      name
      0    0 0000532E StartAnnouncing
      1    1 0000533E StopAnnouncing
Summary
    2000 .reloc
    4000 .rsrc
    2000 .sdata
    4000 .text

但是,如果我尝试在cpp文件中导入它

#import "Nugget.Discovery.dll" 
   void StartAnnouncing(int serial);

我尝试编译后收到一个IntelliSense错误和一个错误:

IntelliSense: cannot open source file "Debug/Nugget.Discovery.tlh"
error C1083: Cannot open type library file: 'nugget.discovery.dll': Fehler beim Laden der Typbibliothek/DLL.

知道我做错了什么吗?

最好的祝福!
   斯特凡

解决方法:

作为DllExport的一部分,生成.lib文件.您可以使用它来使用普通的C链接器而不是LoadLibrary / GetProcAddress.

从您发布的托管代码开始,在本机端:

extern CALLBACK void StartAnnouncingType(int serial);
extern CALLBACK int TestType(void);

int _tmain(int argc, _TCHAR* argv[])
{
    int test = TestPtr();
    StartAnnouncingPtr(1);
}

在您的非托管项目的设置中,将Nugget.Discovery.lib添加到项目属性:Configuration Properties-> Linker-> Input.并将Nugget.Discovery.dll复制到输出目录.

上一篇:C DLL没有导出我的函数


下一篇:c – 是否可以在__stdcall中输出导出的函数并且名称为unmangled?