2016-11-07 10 views
0

言って、私は、エクスポート機能がVS2008でそのように定義した場合:だから#define定義をVS2008の文字列に変換するにはどうすればよいですか?

#define myExportedFunction fn1 

extern "C" __declspec(dllexport) BOOL WINAPIV myExportedFunction(int val) 
{ 
    return val == 2; 
} 

は、どのように私はそのようなとして使用するmyExportedFunctionプリプロセッサの定義のうち、文字列を作成するのですか?

BOOL(WINAPIV *pfn_myExportedFunction)(int val); 

HMODULE hDll = ::LoadLibrary(strMyDllPath); 
(FARPROC&)pfn_myExportedFunction = ::GetProcAddress(hDll, myExportedFunction); //Causes: error C2065: 'fn1' : undeclared identifier 
+0

は、なぜあなたは ''の#define myExportedFunction "FN1" を使用していませんか? – Danh

+0

@ダン:それでは、関数のエクスポート名はどのように機能しますか? – c00000fd

答えて

3

だけprepocessor演算子を使用します。

#define myExportedFunction fn1 
#define TO_STR_(X) #X 
#define TO_STR(X) TO_STR_(X) 

extern "C" __declspec(dllexport) BOOL WINAPIV myExportedFunction(int val) 
{ 
    return val == 2; 
} 

BOOL(WINAPIV *pfn_myExportedFunction)(int val); 

HMODULE hDll = ::LoadLibrary(strMyDllPath); 
(FARPROC&)pfn_myExportedFunction = ::GetProcAddress(hDll, TO_STR(myExportedFunction)); 
+0

OK。ありがとう。あなたは '#x'と' TO_STR_'でやっていることを説明できますか? – c00000fd

+1

@ c00000fd、それらはプリプロセッサ操作です。 [read up](https://en.wikipedia.org/wiki/C_preprocessor#Token_stringification) – StoryTeller

関連する問題