簡體   English   中英

C#char指針,調用C ++ dll函數並傳遞參數

[英]C# char pointer, Calling C++ dll functions and passing parameters

我想從C#調用C函數。 C函數位於dll中。 我要調用的函數聲明如下:

int raxml_main(int argc, char*[] argv);

問題是我是C#的新手,我不知道如何將string[] args轉換為char*[] argv 可能嗎? 任何想法?

嘗試在下面使用:

public static extern int raxml_main(int count, string[] argv);

您需要使用適當的DllImport裝飾。

有時必須將string聲明為StringBuilder但我懷疑在此是否有必要,因為正在發送字符串。

您可以使用PInvoke Interop Assistant之類的工具來生成所需的簽名。 您的情況是:

[System.Runtime.InteropServices.DllImportAttribute("yours.dll", EntryPoint="raxml_main")]
public static extern  int raxml_main(int argc, System.IntPtr[] argv) ;

我結合了兩個答案,它奏效了。 解決方法如下:

[System.Runtime.InteropServices.DllImportAttribute("RaxmlDLL.dll", EntryPoint="raxml_main")]
public static extern  int raxml_main(int argc, string[] argv) ;

您可以將字符串轉換為字節數組,但是必須確保raxml_main函數中的編碼兼容(ascii編碼可能更合適)。

這只是我在網上找到的一些代碼。

 // C# to convert a string to a byte array.
 public static byte[] StrToByteArray(string str)
 {
     System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
     return encoding.GetBytes(str);
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM