c ++ dll导出损坏的名称
c++ dll export mangled name
我正在尝试导出一个名为 CreateGameClient
的函数,当我执行 dumpbin /exports 时,我得到了这个 ?CreateGameClient@@YAXXZ
并且我正在将 DLL 注入到需要的程序中CreateGameClient
而不是 ?CreateGameClient@@YAXXZ
我正在使用 Visual Studio 2012,如果有帮助的话
这是我的代码ExpFunc.h
#ifndef INDLL_H
#define INDLL_H
#ifdef EXPORTING_DLL
__declspec(dllexport) void CreateGameClient() ;
#else
__declspec(dllimport) void CreateGameClient() ;
#endif
#endif
Main.cpp
#include "stdafx.h"
#include <Windows.h>
#include <string.h>
#include <sstream>
#include <stdio.h>
#include <fstream>
#define EXPORTING_DLL
#include "ExpFunc.h"
void WriteLogFile(const char*);
void CreateGameClient2(int);
char* logStr;
char* CGCNStr;
char buf[250];
DWORD pid = GetCurrentProcessId();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
logStr = "Attached To: %d";
sprintf(buf, logStr, pid);
WriteLogFile(buf);
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
logStr = "Detached To: %d";
sprintf(buf, logStr, pid);
WriteLogFile(buf);
break;
}
return TRUE;
}
void CreateGameClient()
{
CreateGameClient2(2);
}
void CreateGameClient2(int num)
{
std::stringstream temp_str;
temp_str << (num);
std::string str = temp_str.str();
const char* cstr2 = str.c_str();
sprintf(buf, cstr2, pid);
WriteLogFile(buf);
}
void WriteLogFile(const char* szString)
{
FILE* pFile = fopen("logFile.txt", "a");
fprintf(pFile, "%s\n",szString);
fclose(pFile);
}
我试过了C++ DLL Export: Decorated/Mangled names
但还是不行
您必须使用 extern "C" __declspec(...)
修饰函数的声明和定义,否则您会收到关于不一致的链接定义和不稳定行为的警告。
我正在尝试导出一个名为 CreateGameClient
的函数,当我执行 dumpbin /exports 时,我得到了这个 ?CreateGameClient@@YAXXZ
并且我正在将 DLL 注入到需要的程序中CreateGameClient
而不是 ?CreateGameClient@@YAXXZ
我正在使用 Visual Studio 2012,如果有帮助的话
这是我的代码ExpFunc.h
#ifndef INDLL_H
#define INDLL_H
#ifdef EXPORTING_DLL
__declspec(dllexport) void CreateGameClient() ;
#else
__declspec(dllimport) void CreateGameClient() ;
#endif
#endif
Main.cpp
#include "stdafx.h"
#include <Windows.h>
#include <string.h>
#include <sstream>
#include <stdio.h>
#include <fstream>
#define EXPORTING_DLL
#include "ExpFunc.h"
void WriteLogFile(const char*);
void CreateGameClient2(int);
char* logStr;
char* CGCNStr;
char buf[250];
DWORD pid = GetCurrentProcessId();
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
logStr = "Attached To: %d";
sprintf(buf, logStr, pid);
WriteLogFile(buf);
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
logStr = "Detached To: %d";
sprintf(buf, logStr, pid);
WriteLogFile(buf);
break;
}
return TRUE;
}
void CreateGameClient()
{
CreateGameClient2(2);
}
void CreateGameClient2(int num)
{
std::stringstream temp_str;
temp_str << (num);
std::string str = temp_str.str();
const char* cstr2 = str.c_str();
sprintf(buf, cstr2, pid);
WriteLogFile(buf);
}
void WriteLogFile(const char* szString)
{
FILE* pFile = fopen("logFile.txt", "a");
fprintf(pFile, "%s\n",szString);
fclose(pFile);
}
我试过了C++ DLL Export: Decorated/Mangled names
但还是不行
您必须使用 extern "C" __declspec(...)
修饰函数的声明和定义,否则您会收到关于不一致的链接定义和不稳定行为的警告。