2013-05-06 2 views
0

여기에 문제가 있습니다. 헤더 파일 내부의 C++ DLL에서 메서드를 링크 및 정의하는 방법을 모르겠습니다. Code :: Blocks에 어떻게 링크합니까? 또한 헤더 파일 내부에서 메서드를 정의하려면 어떻게해야합니까? 나는 이것이 바보 같은 질문 인 것처럼 느낀다. 그러나 나는 그것을 온라인 어디에서도 발견 할 수 없다.Code :: Blocks에서 헤더 파일로 DLL에 액세스하기

+0

나는 오해하고 있는가, 아니면'LoadLibrary'와'GetProcAddress' 종류의 것을 의미합니까? – chris

+0

잘 모르겠습니다. 나는 DLL을로드 할 수 있기를 원하며, MinGW를 사용하여 헤더 내부에서이를 수행하는 방법을 모른다. – user2348979

+0

헤더 밖에서 또는 MinGW없이 어떻게하는지 알고 계십니까? – chris

답변

0

MinGW로 인해 Windows를 의미한다고 가정하면 그렇게 나쁘지 않습니다. 예를 들어, "someDllFunction"라는 "theDLL.dll"의 기능은 double를 받아 발췌있을 가능성이있는 int을 반환 : 당신은 더 일반적인 발신자를 작성하여 더욱이 걸릴 수

//dllfunctions.h 
int someDllFoo(double d) { 
    auto dll = LoadLibraryW(L"theDLL"); 
    if (!dll) { 
     //error 
    } 

    using FooType = int(*)(double); 
    auto func = (FooType)GetProcAddress(dll, "someDllFunction"); 
    if (!func) { 
     //error 
    } 

    int result = func(d); 

    if (!FreeLibrary(dll)) { 
     //error 
    } 

    return result; 
} 

//whatever.cpp 
#include "dllfunctions.h" 

int main() { 
    int result = someDllFoo(3.2); 
} 

합니다. 이 결과를 할당하기 때문에 다음은, 리턴 타입이 void 작동하지 않습니다,하지만 추가 가능한입니다 : 작업, 또는 적어도 올바른 궤도에 있어야

template<typename Ret, typename... Args> 
Ret callDllFunction(const std::wstring &dllName, const std::string &funcName, Args... args) { 
    auto dll = LoadLibraryW(dllName.c_str()); 
    if (!dll) { 
     //error 
    } 

    using FuncType = Ret(*)(Args...); 
    auto func = (FuncType)GetProcAddress(dll, funcName.c_str()); 
    if (!func) { 
     //error 
    } 

    Ret result = func(args...); 

    if (!FreeLibrary(dll)) { 
     //error 
    } 

    return result; 
} 

int main() { 
    //tested example 
    callDllFunction<int>(L"user32", "MessageBoxW", nullptr, nullptr, nullptr, 0); 
} 

있다. 물론, 내가 말했듯이, 당신이 그것의 다른 버전을 추가 할 때까지 void 리턴 타입에는 작동하지 않는다. __stdcall 함수로 확장 할 수도 있습니다. 또한 DLL의 오류 함수를 처리 할 수 ​​있도록 오류 메커니즘을 설정하는 것이 좋습니다. SetLastError을 사용하는 경우 FreeLibrary 호출로 재정의 될 수 있습니다. 정말로 당신이해야 할 일이 무엇인지에 달려 있습니다. 함수가 끝나면 FreeLibrary을 호출하는 스마트 포인터에 dll을 넣는 것도 고려해 볼 수 있습니다.

관련 문제