我正在尝试从 vb.net 获取 DllExport 到非托管 c++ 工作。
我在用着罗伯特·吉塞克 (Robert Giesecke) 的不受管理的出口 https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports使用 Visual Studio 2012 并尝试遵循此非常有帮助的提示 http://www.mql5.com/en/articles/249。我通过在 *.cpp 和 *.h 文件所在的目录中执行构建后操作,从 .Net 项目中复制 dll。
我检查了我的 dlldumpbin /EXPORTS Nugget.Discovery.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
到项目属性:配置属性->链接器->输入。并将 Nugget.Discovery.dll 复制到输出目录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)