【发布时间】:2010-12-27 20:02:16
【问题描述】:
我目前正在将专有 dll(一种 API)移植到 C#,在编组一些使用的数据类型时遇到了一些问题。
例如API头文件定义了以下类型:
typedef unsigned int tINT; /* natural unsigned */
typedef signed int tINTs; /* natural signed */
typedef unsigned int tLONG; /* 32 bit unsigned */
typedef unsigned long tPTR; /* 32/64-bit pointer */
然后我例如有以下函数定义:
tINTs SomeApiFunction ( const tPTR hdl, tINT param );
我通常将int 直接与C# 的int (Int32) 或未签名版本进行编组。 API 的tLONG 和tINT 是一样的(至少对于API)。但我不确定tPTR。我现在在 C# 中将其设为 uint,因为它是 32 位 int,但我不确定 long 在 64 位机器上的表现如何。
我必须做些什么来确保 API 可以在 32 位和 64 位机器上正常工作?
这就是我现在要做的:
[DllImport( "api.dll" )]
public static extern int SomeApiFunction ( uint hdl, uint param );
遗憾的是,API 并没有很好的记录,因此我不确定所有这些(重叠的)typedef 的意图是什么。除了我上面包含的标题 cmets 之外,没有关于实际类型的信息。
【问题讨论】:
标签: c# c++ marshalling