C#char指针,调用C ++ dll函数和传递参数

时间:2011-04-20 20:41:46

标签: c# c dll

我想从C#调用C函数。 C函数在dll中。我想调用的函数声明如下:

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

问题是我是C#的新手,我不知道如何将string[] args转换为char*[] argv。可能吗?有什么想法吗?

4 个答案:

答案 0 :(得分:4)

尝试使用以下内容:

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

您需要使用适当的DllImport进行装饰。

有时string必须声明为StringBuilder,但我怀疑这是必要的,因为正在发送字符串。

答案 1 :(得分:0)

您可以使用PInvoke Interop Assistant等工具生成所需的签名。在你的情况下它是:

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

答案 2 :(得分:0)

我结合了两个答案并且有效。 这是解决方案:

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

答案 3 :(得分:-1)

您可以将字符串转换为字节数组,但您必须确保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);
 }