案例:我正在創建一個應用程序,該應用程序應該能夠獲取位於特定文件夾中的所有DLL並加載它們。這些DLL充當模塊,應該能夠執行可能發生或可能不發生在主應用程序中的某些任務。C++ DLL:包含來自項目的類
若要允許從我的DLL訪問主應用程序我已將主應用程序的文件夾添加到DLL的其他包含目錄。這可以在我的主應用程序的頭文件中調用#include
並使用它的類和函數。
問題:包括那些在主應用程序的頭文件中似乎會導致試圖從這些包含函數中訪問DLL的問題。例如:我的主應用程序中有一個'Target'類。這個類有1包括:
#ifndef D3DX9_INCLUDED
#define D3DX9_INCLUDED
#include <d3dx9.h> // Direct3D 9
#endif
如果我有Target.h在我的DLL,我得到4級相同的錯誤:
Error 2 error C3861: 'sqrtf': identifier not found c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3dx9math.inl 1585 1 WW
Error 3 error C3861: 'sqrtf': identifier not found c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3dx9math.inl 1717 1 WW
Error 4 error C3861: 'sqrtf': identifier not found c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3dx9math.inl 1862 1 WW
Error 5 error C3861: 'sqrtf': identifier not found c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3dx9math.inl 2032 1 WW
如果我刪除原來的目標類包括有沒有錯誤了。
我可以在我的DLL中包含d3dx9而不會出現問題,但只有當它不包含在Target類中時纔會如此。
將d3dx9.h直接包含到我的DLL中,給出與上述完全相同的錯誤。很明顯,這並沒有幫助,因爲我需要在Target類以及DLL中包含某些類和函數。
我正在尋找一個不同類型的文件,而不是模塊的DLL?在使用DLL時,有什麼我應該記住的?
如果我忘記添加任何信息,請告訴我,我會盡我所能。 任何幫助將不勝感激。
更新:剝離DLL的最低限度只有math.h和d3dx9.h包括仍給我相同的錯誤。
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <math.h>
#include <d3dx9.h> // Direct3D 9
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:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
嘗試從它加載的DLL中調用EXE函數有一些有趣的複雜性,但是您的問題要簡單得多。你有沒有試過'#包括'提前包括這個其他頭? –
2014-08-31 20:19:55
是的,我擔心這會發生併發症。試圖環顧四周,但大多數人做的是完全相反,這是更有意義的嘿嘿。我試圖包括math.h,但不幸的是沒有運氣。它不斷給出相同的錯誤。 – Tim 2014-08-31 20:40:24
我還發現,由於某種原因,將d3dx9.h直接包含到DLL中會給出完全相同的錯誤。我想這是以前沒有發生的,因爲項目和DLL的構建不正確。我已將此信息添加到主帖子中。 – Tim 2014-08-31 20:46:25