[英]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.