C#調用C++ dll中返回值為字符串的函數問題


C#調用C++ dll函數,如果返回值為字符串,我們使用string去接收就會報錯,因為C++返回的是char*,是個指針,所以c# 要用 IntPtr 來接收。

C++:

//預編譯的標頭 .h
extern "C" _declspec(dllexport) char* demo(const char* params1, const char* params2);

//函數體實現 .cpp
extern "C" _declspec(dllexport)char* demo(const char* params1, const char* params2)
{
    char* result = params1 + params2;
    return result;
}

 C#:

//dll引入
[DllImport("testDll.dll", EntryPoint = "demo")]
public static extern IntPtr demo(string params1,string params2);

//函數調用
IntPtr tranResult = DllLoad.demo("參數1", "參數2");
Log.println("tranResult===>:" + Marshal.PtrToStringAnsi(tranResult));

 通過Marshal.PtrToStringAnsi 將非托管ANSI字符串中第一個空值(空值就是\0)之前的所有字符復制到托管String,將每個 ANSI 字符擴展為Unicode字符,最后就成功返回字符串了。

  總結:實踐是檢驗真理的唯一標准。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM