- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从 vb.net 获取 DllExport 到非托管 C++ 的工作。
我正在使用 Robert Giesecke's Unmanaged Exports使用 Visual Studio 2012 并尝试遵循此 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。
从您发布的托管代码开始,在 native 端:
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++ - 罗伯特·吉塞克的非管理导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272593/
This question already has an answer here: LinkedHashMap variable is not accessable out side the fore
提前致歉。这似乎是一个简单的任务,但几个小时后在 Google 上进行猜测/检查,我仍然无法弄清楚。 我正在为我公司提供的 API 编写一个 Java 便捷包装器库。其中一个类看起来像这样: clas
我是一名优秀的程序员,十分优秀!