嘿,大家好,我正在致力于在旧版 Visual C++ 6.0 dll 项目中创建一个新函数,以便 C# dll 可以调用,但是由于名称修改,我无法这样做,而且似乎无论我做什么我都可以'别阻止它,(我使用dumpbin来查看名称)这里是相关代码
这是头文件的一个真正精简的版本
#ifdef _V7SSCOMM_CPP_
#define _DECL_V7COMM_DLL __declspec(dllexport)
#else
#define _DECL_V7COMM_DLL __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
_DECL_V7COMM_DLL DWORD V7ssGetFileDirInfoUnicode(LPCSTR szSign, V7_FILE_LIST_TYPE eListType, LPCSTR szServer, LPCSTR szLibrary, LPCSTR szExt, DWORD *pdwFileCnt, wchar_t *pbyFileBuf, DWORD *pdwFileBufSize);
#ifdef __cplusplus
}
#endif
#endif
以及 cpp 文件
_DECL_V7COMM_DLL DWORD V7ssGetFileDirInfoUnicode(LPCSTR szSign,
V7_FILE_LIST_TYPE eListType,
LPCSTR szServer, LPCSTR szLibrary, LPCSTR szExt,
DWORD *pdwFileCnt, wchar_t *pbyFileBuf, DWORD *pdwFileBufSize)
{
if (!szSign || !szServer || !szLibrary || !szExt || !pdwFileCnt || !pbyFileBuf || !pdwFileBufSize)
return (RPC_S_INVALID_ARG);
error_status_t Error = rpcGetFileDirInfoUnicode(
/* [in] */ g_hRpcBinding,
/* [in, string] */ (unsigned char *)szSign,
/* [in] */ (unsigned long)eListType,
/* [in, string] */ (unsigned char *)szServer,
/* [in, string] */ (unsigned char *)szLibrary,
/* [in, string] */ (unsigned char *)szExt,
/* [out] */ (unsigned long *)pdwFileCnt,
/* [out, size_is(*pdwFileBufSize)] */ (wchar_t *)pbyFileBuf,
/* [in, out] */ (unsigned long *)pdwFileBufSize);
return (Error);
} // end V7ssGetFileDirInfoUnicode()
dumpbin 返回以下内容 1 0 00001401 ?V7ssGetFileDirInfoUnicode@@YAKPBDW4tag_V7_FILE_LIST_TYPE@@000PAKPAG2@Z
理想情况下这不是我想要的,它只是 V7ssGetFileDirInfoUnicode
据我所知,从我一直在阅读的内容来看,我尝试这样做的方式意味着我不需要在 .def 文件中定义它。奇怪的是,我遵循与正确显示的预先存在的函数相同的精确设置。
如果有任何帮助,我将不胜感激。谢谢!
更新
.def 文件选项只要不进行名称修改即可工作,也就是说 MIDL 编译器不会创建 RPC stub ,我认为这两个问题是相关的。
这里还有 MIDL 版本,取自 C 文件iteself
/* this ALWAYS GENERATED file contains the RPC server stubs */
/* File created by MIDL compiler version 5.01.0164 */
/* at Wed Sep 21 08:57:22 2011
*/
/* Compiler settings for V7Rpc.idl:
Os (OptLev=s), W1, Zp8, env=Win32, ms_ext, c_ext
error checks: allocation ref bounds_check enum stub_data
*/
//@@MIDL_FILE_HEADING( )
最佳答案
如果您确定包含了 .cpp
文件中的头文件,那么您可以尝试将 .def
文件添加到您的项目中。可能还有其他方法,但这似乎始终是减少导出中名称损坏的关键部分。内容看起来像这样。
EXPORTS
V7ssGetFileDirInfoUnicode
关于visual-c++ - Visual C++ 6.0 名称修改,即使在 extern "C"和 dllexport 内,也不会生成 RPC stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7500911/