2017-02-10 50 views
0

看起來我在這裏犯了一個基本的錯誤。我有一個3方C++庫(test.dll),其中有一個API定義如下。我通過加載庫,獲取API和調用來調用這個APi。我是C++ CLI的新手,任何解決問題的指針都會有所幫助。提前致謝。C++/CLI如何將整數指針傳遞給C++ API

第三方庫導出API FUNCTION_EXPORT void STDCALL GetVersion(UINT16 & version); typedef void(STDCALL * GETVERSION)(UINT16);

我需要從C++ CLI調用它

頭文件

MyTest.h 

namespace MyTest { 

public ref class TestClass 
{ 

public: 
    HMODULE module; 
    String^ version; 

    void TestMethod() 
}; 
} 
  • cpp文件

    MyTest.cpp 
    namespace MyTest { 
    TestClass::TestMethod() 
    { 
    this->module = LoadLibrary(engineDllPath); 
    if (!this->module) 
    { 
        return String::Format("LoadLibrary failed"); 
    }; 
    
    // Get engine version 
    GETVERSION GetVersionApi = (GETVERSION)GetProcAddress(module, "GetVersion"); 
    if (!GetVersionApi) 
    { 
        return; 
    } 
    
    
    UINT16 major; 
    GetVersionApi(&uiMajor); 
    } 
    } 
    
  • 獲取編譯錯誤 錯誤C2664:'void(UINT16 &)':不能將參數1從'UINT16 *'轉換爲'UINT16 &'

    代碼片段是給出一個想法,我正在嘗試。主要問題是這裏 UINT16主要; GetVersionApi(& uiMajor);

    什麼是正確的調用方式。請幫忙。

    回答

    1
    GetVersion(UINT16& version); 
    

    這不是一個整數指針,這是一個整數引用。您不需要輸入任何額外的字符來傳遞引用。

    GetVersionApi(uiMajor); 
    //   ^no "&"