C#中C ++的等效数据类型

时间:2011-03-01 18:47:45

标签: c# mfc casting types pinvoke

我正在尝试在我的C#应用​​程序中使用MFC Dll。它基本上是一个代理,可以更轻松地与硬件设备连接。  我正在使用P / Invoke编写一个包装类,以便能够使用dll中定义的方法。

  • 我对P / Invoke的东西很新。这会起作用吗?我无法经常测试它,因为我没有可用于在我的开发机器上测试的硬件。
  • 您能否将我推荐给C#中具有相同数据类型C ++的页面?当变量旁边有*时,我应该使用什么类型?喜欢 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

2 个答案:

答案 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 []。