none
如何讓C++/CLI專案使用Native C++專案的內容? 或者是如何合併C++/CLI專案和Native C++專案? RRS feed

  • 問題

  • 我有兩個專案,分別為C++/CLI專案(或者是Managed C++專案)和Native C++專案(或者是Unmanaged C++專案),想要讓C++/CLI專案可以呼叫Native C++專案內的class

    C++/CLI專案專門寫Windows Form的UI,現在想按UI上的一個按鈕就執行一個在Native C++專案內的功能

    我有測試把Native C++專案的Common Language Runtime支援改成支援/clr,也把其他不相容/clr的設定改掉,在單獨Native C++專案內確實可以compiler成功。

    現在我在原本的C++/CLI專案新增Native C++專案的參考,並把Native C++專案的路徑加入 屬性->C/C++->其他Include目錄內 ,在C++/CLI專案#include我要的Native C++專案標頭檔後,compile出現下面errors

    ----
    2>setup.obj : error LNK2028: 無法解析的語彙基元 (0A000010) "public: __thiscall Hub4com::Hub4com(int)" (??0Hub4com@@$$FQAE@H@Z) 在函式 "private: void __clrcall SetupApp::Form1::imgButtonEnable_Click(class System::Object ^,class System::EventArgs ^)"
    (?imgButtonEnable_Click@Form1@SetupApp@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) 中被參考

    2>setup.obj : error LNK2019: 無法解析的外部符號 "public: __thiscall Hub4com::Hub4com(int)" (??0Hub4com@@$$FQAE@H@Z) 在函式 "private: void __clrcall SetupApp::Form1::imgButtonEnable_Click(class System::Object ^,class System::EventArgs ^)"
    (?imgButtonEnable_Click@Form1@SetupApp@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) 中被參考

    2>D:\SVN\trunk\VirtualCOMAPP\setupg\Debug\setupg.exe : fatal error LNK1120: 2 個無法解析的外部符號
    ------

    我有查過有些人是在dependency加入另一專案的dll即可,但我根本沒有生成dll檔,而且我也將Native C++專案加入到C++/CLI專案的參考內了,還是搞不懂哪裡弄錯,麻煩各位解答了。



    • 已編輯 kuotech 2015年10月26日 上午 05:56
    2015年10月26日 上午 04:24

解答

所有回覆

  • 您可以參考這篇文件的做法:Exposing native to managed - C++/CLI vs. P/Invoke

    • 已標示為解答 kuotech 2015年10月28日 上午 07:49
    2015年10月26日 上午 06:29
  • 您好,我已經照著這篇第二個方法,已經建出native lib,以及managed dll,但是裡面沒有講要怎麼import dll

    我是直接在我windows form檔案內第一行打入#using <MyComponent.dll>,並此dll加入dependency

    MyComponent.dll是我生成出來的dll檔,但是要import dll裡面的Class的時候遇到了一些問題

    compile出來會跳出error

    fatal error LNK1302: 僅支援連結 safe .netmodules,無法連結 ijw/native .netmodule

    ---上面這個問題解決了,把dependency裡面的dll拿掉就可以執行

    可以成功使用DLL了!


    • 已編輯 kuotech 2015年10月28日 上午 07:49
    2015年10月27日 上午 06:35