extern 〃C〃 void —declspec( dllexport ) Funcation(int a, int b, int *c)
{...}
将此函数封状在DLL中,用C++Builder编译,调用Funcation函数找不到此函数。
后来使用某工具查看DLL才发现函数名被编译器改变了。成为_Funcation。后来又用VS C++编译DLL函数名变为Funcation@12
请问有什么方法可以让编译后的函数名保持不变?因为在程序代码中我会固定调用此函数名。谢谢。。
我什么也不说,只举一个最简单的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
extern
"C"
{
__declspec
(
dllexport
)
int
__stdcall fun1(
int
a,
int
b)
{
return
a + b;
}
__declspec
(
dllexport
)
int
__cdecl fun2(
int
a,
int
b)
{
return
a + b;
}
__declspec
(
dllexport
)
int
__fastcall fun3(
int
a,
int
b)
{
return
a + b;
}
}
|
你用C++Builder新建一个dll工程,加入上面的代码,编译后,查看生成的DLL文件的导出表就明白了。
如果一切正常的话,导出表应该是这样的:
fun1
_fun2
@fun3
当然,还有一个C++Builder的标志性导出函数__CppDebugHook