- 主题:动态库这么导出函数的活久见
dll导出的变量、函数名字没啥"规范",只要调用者、被调用者约定一致就行。
只不过大部分情况下导出的函数名是去掉了c++ name mangling的。
但是不去掉name mangling也是允许的,甚至可以导出一个复杂的c++类(这种涉及到内存布局,就无法跨语言了)
【 在 vmx 的大作中提到: 】
: 就给了这么一个header,lib没注意,反正开发是PB和Delphi或者C#,都用不到lib
: 反正移民局给的demo是C#的,我倒是没注意.net里的DllImport为啥能把那些前缀的下划线和后缀的参数长度给抹掉了,主要是从没见过公用Dll导出函数不是WINAPI规范的。
--
FROM 123.119.160.*
C#生成的库默认只能与C#互通,要想与C兼容需要额外设置
【 在 vmx 的大作中提到: 】
: 就给了这么一个header,lib没注意,反正开发是PB和Delphi或者C#,都用不到lib
: 反正移民局给的demo是C#的,我倒是没注意.net里的DllImport为啥能把那些前缀的下划线和后缀的参数长度给抹掉了,主要是从没见过公用Dll导出函数不是WINAPI规范的。
--
FROM 1.202.157.*
no no,和C#没啥关系,C#只是做了调用demo而已。
【 在 AlphaO 的大作中提到: 】
: C#生成的库默认只能与C#互通,要想与C兼容需要额外设置
--
FROM 218.74.53.*
stdcall的导出,是要进行名称混淆的,哪怕用了extern c也不行。这时候需要用def文件来修正名字。
【 在 vmx 的大作中提到: 】
: no no, 大家都是stdcall,
: 我的调用方是默认就走stdcall的, 最后也调成功把卡里信息都dump出来了,
: 然后我们换了另一家的读卡接口拉倒.
: ...................
--来自微微水木3.5.14
--
FROM 183.193.16.*
WINAPI规范的导出函数(确实地说是name mangling)本来就是要加_前缀和参数长度后缀的。
【 在 vmx 的大作中提到: 】
: 就给了这么一个header,lib没注意,反正开发是PB和Delphi或者C#,都用不到lib
: 反正移民局给的demo是C#的,我倒是没注意.net里的DllImport为啥能把那些前缀的下划线和后缀的参数长度给抹掉了,主要是从没见过公用Dll导出函数不是WINAPI规范的。
--
FROM 221.221.150.*
没懂,前面不是有extern "C"了么,为啥名称还会变呢?求教
--
FROM 223.104.41.*
stdcall有规定,后面要加"@4"这种后缀
楼主那头文件里没stdcall字样,应该在工程里设置了函数调用默认都是stdcall
【 在 iamwing 的大作中提到: 】
: 没懂,前面不是有extern "C"了么,为啥名称还会变呢?求教
--
FROM 222.128.162.*