2016-03-29 15 views
-1

私はCreateGameClientと呼ばれる機能をエクスポートしようとしていると私はDUMPBIN /エクスポートを行うとき、私は、この代わりに[email protected]@YAXXZ、私はニーズCreateGameClientなく[email protected]@YAXXZC++のdllエクスポートマングルされた名前

にDLLを注入していたプログラムを取得し、それは

を助け場合、私は MAIN.CPP

ExpFunc.hこれは私のコードである

#ifndef INDLL_H 
#define INDLL_H 

#ifdef EXPORTING_DLL 
    __declspec(dllexport) void CreateGameClient() ; 
#else 
    __declspec(dllimport) void CreateGameClient() ; 
#endif 

#endif 

をVisual Studioの2012を使用しています

#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

を試してみましたが、それでも

+0

あなたが試したリンクされた質問からどのような解決策がありますか? 'extern" C "'? –

+0

'?CreateGameClient @@ YAXXZ'の[Demangling](http://demangler.com/)は実際にあなたのケースで正しい' void __cdecl CreateGameClient(void) 'を返します。 – Mahesh

+0

私はHans Passantのソリューションがうまくいかないことを試しました – DavidTheTech

答えて

2

を動作しませんでしたあなたはextern "C" __declspec(...)と機能の両方の宣言と定義を飾る必要があります。

+0

私はそれを置く必要がある場所を私に見せてくれますか? – DavidTheTech

+0

.cppファイルにもCreateGameClient()があります。 extern "C" __declspec()をその署名に追加すると、ヘッダーファイルのようになります。 – jszpilewski

+0

OKありがとうございます – DavidTheTech

関連する問題