我需要有关自定义编组的帮助..我有一个原生DLL ..一些DLL函数的参数是用unsigned char *定义的
例如;
typedef short apiStatus;
apiStatus __declspec(dllexport) __stdcall DrfGetFirmwareVersion (HANDLE hCom, unsigned char *major,unsigned char *minor, unsigned char ReaderAddr = 0xff);
我描述函数参数的文档如下;
输入参数:
如何将此函数声明为C#.. ??
任何帮助都会非常感激
答案 0 :(得分:1)
如果这个DLL真的非常老(当char仍未签名时返回)那么它可能会返回字符串。但这很不可能,只需将它们声明为out byte:
[DllImport("blah.dll")]
private static extern noidea DrfGetFirmwareVersion(IntPtr handle,
out byte major, out byte minor, byte address);
其中“noidea”可能是无效的或某种int错误代码。另一件需要担心的是DllImport.CallingConvention属性,它可能是Cdecl。当您收到有关堆栈不平衡的MDA警告时使用它。不要忘记将项目的平台目标设置为x86,否则它将在64位操作系统上轰炸。
答案 1 :(得分:0)
我已经使用overloed作为默认参数(VS2005).i导入了如下函数;
public class sDrfGetFirmwareVersion
{
//apiStatus __declspec(dllexport) __stdcall DrfGetFirmwareVersion (HANDLE hCom, unsigned char *major,unsigned char *minor, unsigned char ReaderAddr = 0xff);
[DllImport("DrfApiV10.dll", CallingConvention = CallingConvention.StdCall,CharSet=CharSet.Ansi,EntryPoint="DrfGetFirmwareVersion", ExactSpelling=false)]
public static extern short DrfGetFirmwareVersion(IntPtr hCom, out byte major, out byte minor,byte ReaderAddr);
public static short DrfGetFirmwareVersion(IntPtr hCom, out byte major,out byte minor)
{
return DrfGetFirmwareVersion(hCom, out major,out minor, 0xff);
}
}
你可以验证我吗?