我想从C#调用C函数。 C函数在dll中。我想调用的函数声明如下:
int raxml_main(int argc, char*[] argv);
问题是我是C#的新手,我不知道如何将string[] args
转换为char*[] argv
。可能吗?有什么想法吗?
答案 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);
}