c++dll导出损坏的名称

c++ dll export mangled name

本文关键字:损坏 c++dll      更新时间:2023-10-16

我正试图导出一个名为CreateGameClient的函数,当我进行转储/导出时,我得到的是?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

主要.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, "%sn",szString);
    fclose(pFile);
}

我尝试过C++DLL导出:修饰/混乱的名称

但仍然不起作用

必须用extern "C" __declspec(...)修饰函数的声明和定义,否则将收到关于不一致链接定义和不稳定行为的警告。