none
VS 2005 C# 與 C++ 間值的傳遞 RRS feed

  • 問題

  • 我有兩支元件一個由VS2005 C#所寫

    一個由VS2005 C++所寫

    C#元件傳遞string給V++元件接收(char*)

    利用-->char* charC++ = (char*)(void*)Marshal:Tongue TiedtringToHGlobalAnsi(stringC#);

    但是回傳時一直出錯

    我回傳時假設應為sdfjsdfklajsdfljaskldfjklj(一串亂碼),但是會變成一堆中文或韓文等亂碼。

    利用-->String ^stringC# = gcnew String((wchar_t*)(void*)char*C++);

    就是應為8bit為一組,但是C# 讀到是以16bit為一組。

    -------------------------------------------------------------------------------------------------------------------------------------

    其實主要想問如何將C++ unsigned char* 轉為 C# string

    或是將C# Byte* 轉到 C# string

    --------------------------------------------------------------------------------------------------------------------------------------

    寫的有點亂,但困擾的好久,因剛碰觸C#對於裡面的型別不太了解

    不知是否有解決的方法呢?

    謝謝各位

    2007年5月9日 下午 01:09

解答

所有回覆

  • HI,

     

    如果C#和C++都是.NET程式, 就直接傳String類別的物件就好了, 不需要轉換

     

    tihs

    2007年5月10日 上午 02:23
  • Hi~

    因C++那支程式為有用到VC++6.0的dll 那支Dll為中華電信所開發它必須接收(unsugned char)

    ..^^
    2007年5月10日 上午 03:28
  • HI,

     

    所以是C#程式傳字串給VC++程式(.NET程式), VC++程式(.NET程式)再將所接的字串傳給VC++6開發的DLL, 如果是這樣, 可以用DllImport宣告直接將字串傳給VC++6的DLL.

     

    tihs

    2007年5月11日 上午 01:58
  • Hi~

    謝謝您~因為我的DLL為別人寫好的DLL只接收unsigned char*回傳的值也為unsigned char*

    而我接收後必須將其轉換為string....^^

    我有嘗試著利用String ^returnValue= gcnew String((char*)((void*)pSignature));將unsigned char*轉為String

    但又遇到另一個問題,正常來說利用Hinet所提供的X509編碼應為一串英文數等符號等亂碼,但我轉換後卻出現一堆各國語言的文字亂碼@@是因為C++為8bit C# 為16bit關係@@?

    最近實做PKI的作業,遇到了很多問題..= =這樣專題做不完了....糟糕...呵呵

    可以順便問問有PKI相關資訊嗎,因為我要做的是讀取自然人憑證,利用私鑰再去做簽章的動作,但是.NET 2.0讀不到自然人憑證的私鑰...@@

    有去看一些討論,有提到為.NET 2.0bug 所以才想利用Hinet讀取自然人憑證的DLL來實做...^^

    謝謝您

    Tyson

    2007年5月11日 上午 02:23
  • 有時候 API 的 unsigned char 不一定是字串。

    中華電信的簡訊系統就是這樣 ...

     

    你可以試著傳 byte[] 進去看看。

    2007年5月11日 上午 03:18
    版主
  • HI,

     

    .NET程式使用DllImport宣告欲呼叫的C函數時, 可以將C函數的char*, LPCSTR之類的參數型態, 宣告成String型態, 再將字串直接傳入使用, 或許您可以試試看

     

    tihs

    2007年5月13日 上午 04:49
  •  

     

    這篇文章跟敝人再嵌入式回的類型很類似,順手貼一下連結:

    http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=3364734&SiteID=14
    2008年5月21日 上午 09:09