作者cole945 (躂躂..)
看板C_Sharp
标题Re: [问题] 汇入c++写的dll档
时间Mon Jul 9 10:28:54 2007
※ 引述《ireullin (raison detre)》之铭言:
: 请问各位我要把c++写成的dll档在c#中使用
: 可是一直遇到 "找不到名称为 fnLibEncrypt 的进入点 (在 DLL LibEncrypt.dll 中)"的
因为在C++时(考虑到overloading),
所以 fnLibEncrypt 不会直接变成 fnLibEncrypt 这个symbol.
(依不同的compiler), 会变成像 fnLibEncrypt_void 之类的symbol.
Visual Studio本身有提供一个命列令小工具(dumpbin)可以看被签什麽样,
不然你也可以用
http://www.dependencywalker.com/ 这个视窗介面的工具检视
该 DLL exports 出的symbol..
(VC签出来应该是 ?fnLibEncrypt@@YAPADXZ 之类的东西吧..不确定..)
: [DllImport(
: "LibEncrypt.dll",EntryPoint="fnLibEncrypt",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
: public static extern int fnLibEncrypt();
所以, 解决方法有两种
1. (不建议.) 把 EntryPoint 改成 "?fnLibEncrypt@@YAPADXZ"
(请自行查明他被签成什麽)
btw, EntryPoint可以不写(如果和method name一样的话..)
2. 在你的DLL那边在 fnLibEnctrypt的最前面加入 extern "C"
让 compiler 知道要把他编成 C-function. 编出来的东西就会像其他的c-function
一样.. 那EntryPoint就会是 fnLibEncrypt 了~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.139.136.137
※ 编辑: cole945 来自: 220.139.136.137 (07/09 10:33)