我正在尝试在我的C#应用程序中使用MFC Dll。它基本上是一个代理,可以更轻松地与硬件设备连接。 我正在使用P / Invoke编写一个包装类,以便能够使用dll中定义的方法。
double *
,ULONG *
,int *
ULONG WINAPI PCXUS_Open(ULONG *hPCXUS, int boot)
ULONG WINAPI PCXUS_WRITE( ULONG hPCXUS, int Board, int Test, int Unit,
LPCSTR strParam, double *dblValue, double dblArrayValue1[MAX_ROW],
double dblArrayValue2[MAX_ROW], LPSTR StrValue, int *Clipped)
最后,我应该如何在定义中用括号定义变量?像:
double dblArrayValue1[MAX_ROW]
,double dblArrayValue1[MAX_ROW]
更新:这是第二种方法的定义:
Arguments:
hPCXUS //Your access number (see PCXUS_Open function)
Board //Board number (0 to N)
Test //Test number (0 to 7) (only for USPC with MUX extension)
Unit //0 = µs ; 1 = mm ; 2 = inch
StrParam //Pointer to parameter name ( see the list )
DblValue //Pointer to parameter value
DblArrayValue1 //Parameter data array 1
DblArrayValue2 //Parameter data array 2
StrValue //ASCII parameter value
Clipped //Pointer to clip information
答案 0 :(得分:2)
是的,这应该有用。
对于C#数据类型: http://msdn.microsoft.com/en-us/library/s1ax56ch(v=VS.100).aspx
对于C#指针: http://msdn.microsoft.com/en-us/library/y31yhkeb(v=VS.100).aspx
C#中的双精度数组为double[]
。
答案 1 :(得分:2)
是的,你可以调整这些功能的几率是不错的。它们看起来像普通的C函数,而不是C ++类的实例方法。 ULONG在C#中是uint,double是double double。 *表示传递指向值的指针。但它含糊不清,它可能是一个通过引用传递的参数(在C#中为ref或out关键字),也可能是一个数组。
第一个函数肯定在C#中将其第一个参数作为“out uint”传递,它返回一个句柄值。
第二个功能更难。无论是 dblValue 是一个数组还是通过引用传递,它的名称都是糟糕的,这是不容错过的。开始猜测“ref double”,你必须查看C ++代码才能确定。与strParam相同的问题,如果传入其值,则应为“string”;如果返回值,则为StringBuilder。 dblArrayValue参数绝对是数组,C#中的double []。