为了避免名称重写C ++代码的问题,我在头文件中使用了extern“C”。但是,当我使用Borland C ++ IDE 构建我的dll文件时,问题仍然存在“”。
以下是我的示例代码。
Others.h文件
#define H_EXPORT WINAPI
#ifdef __cplusplus
extern "C" {
#endif
long H_EXPORT RegOpenKeyEx32( DWORD hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,DWORD FAR *phkResult);
#ifdef __cplusplus
}
#endif
Others.cpp文件
#define C_EXPORT WINAPI _export
//The function has been define like this
long C_EXPORT RegOpenKeyEx32( HKEY hKey,
LPCSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult)
{
//some code
}
def文件中为该函数指定的序数值是
RegOpenKeyEx32 @ 243
但是,在构建dll后,我使用Dll Export Viewer暴露了dll,它的序号值更改为85,函数名称更改为 @ RegOpenKeyEx32 $ qqsp6HKEY__pxcululpp6HKEY __ ,函数被修改为 p>
在同一个文件中,其他.cpp只有一些函数名称(5个函数名称)被破坏,其余的函数名称相同(没有得到名称损坏)。我不明白这是什么问题?
知道问题是什么,请回复......
答案 0 :(得分:1)
您必须使用extern "C"
作为声明和定义。
您可以修改Others.cpp文件,如下所示
#define C_EXPORT WINAPI _export
#ifdef __cplusplus
extern "C" {
#endif
long C_EXPORT RegOpenKeyEx32(HKEY hKey,
LPCSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult)
{
//some code
}
#ifdef __cplusplus
} // extern "C"
#endif
答案 1 :(得分:1)
对于由borland构建的不太复杂的DLL,这对我有用:
#define FX_ENTRY extern "C" __declspec(dllexport)
#define FX_CALL __stdcall
FX_ENTRY void FX_CALL exported_function1()
{
// do something
};
FX_ENTRY void FX_CALL exported_function2()
{
// do something
};