Эй, ребята, я работаю над созданием новой функции в устаревшем визуальном проекте 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
не то, что я в идеале хотел бы, это будет только * V7ssGetFileD_fileFileD:Из того, что я читал, я могу судить, как я пытаюсь это сделать, и это означает, что мне не нужно определять это в файле .def.Что странно, я следую той же настройке extact, что и ранее существующие функции, которые отображаются правильно.
Буду признателен за любую помощь. Спасибо!
Обновление
опция файла .def работает, если не указывать имена, то есть, учитывая, что компилятор MIDL не создает заглушку RPC, я думаю, что эти две проблемы связаны.
также здесь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( )