我从C#.Net托管代码调用非托管C编程代码。但我无法将字符串数组作为参数从.Net传递 C中的功能:
dllmain(const int argc, const char *argv[]){}
请帮助我,如何从C Sharp.Net调用此功能
感谢。
答案 0 :(得分:1)
在.net:
中声明函数时,将以下属性添加到参数argv
[In][MarshalAsAttribute(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]
您还应该将CharSet=CharSet.Unicode
属性添加到应用于外部函数的DllImport属性。
答案 1 :(得分:1)
这是一种可以做到这一点的方法:
C#代码:
声明要从C#调用的C函数
[DllImport("<DLL_File_Name>.dll", CharSet = CharSet.Auto, EntryPoint = "dllmain", ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern void dllmain(ref string str1);
定义字符串
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string str1;
从C#代码
调用C函数 dllmain(ref str1);
C代码:
功能原型
__declspec(dllexport) void __stdcall dllmain(char *str1);
功能定义
void__stdcall dllmain(char *str1)
{
:
}
希望这会对你有所帮助。 : - )