-
让我们分别解释一下。
#define intptr int*
宏的简单定义是使用 intptr 而不是 int*。
所有你遇到 intptr 的地方,你都可以用 int* 来理解。
宏的具体描述太长了,下面我们来看看百科全书是怎么说的:
c,d;理解了 1,然后 intptr c、d; 它等价于 int*c,d;
那么可以肯定,类型 c 是 int*,即 int 类型的指针。
请注意,此处的 int*c,d; 这与 int *c 相同; int* d;是不同的(* 的作用域仅限于第一个变量 c)。
它实际上等同于 int*c; int d;
所以 d 是一个 int 类型。
-
c 整数指针,d 整数。
一般用法如下:
intptr c;
intptr d;
这样,两者都是整数指针。
-
intptr 用于表示特定于平台的指针或句柄类型,这些指针或句柄对于多线程操作是安全的。 c 中的 intptr 类型称为“特定于平台的整数类型”,它们用于本机资源,例如窗口句柄。 资源的大小取决于所使用的硬件和操作系统,但它始终足够大,以包含指向系统的指针(因此也包含资源的名称)。
因此,如果您在调用的 API 函数中有一个参数,例如表单句柄,则在声明此函数时应将其显式声明为 intptr 类型。
-
宏只会被 ** 替换,它实际上是 int* c, d,所以 c 是 int*,d 是 int
-
c 是 int*,d 是 int,int* 是需要 d int* 来制作 d int*; int* d;
-
C 是指向 int 变量(或者更确切地说是 int* 类型)的指针,d 是 int 变量。
因为intptr c,d; 相当于 int* c, d; (使用 int* 直接替换 intptr)。
而 int* c, d; 相当于 int *c; int d;
但这似乎不是我们的意图,因为我们想将 c 和 d 都定义为指针。
因此,我们可以定义 c、d,即 intptr c; intptr d;也就是说,有两个定义来指示 c 和 d 是指针的类型。
-
它实际上是一个句柄,一个没有类型的指针。
非类型化指针不能直接使用,需要传递给接受它的函数。
-
托管窗口中的句柄,一般用于窗口 api,intptr a=(intptr)1;
-
使用 intptr,以下是转换为 intptr 模式点 p 的结构; 要传输的结构。
int size=;
intptr p=;
p, true);
-
如果 C++ 中有结构体:
strct a
有一个函数( a **a );
对应于 c structlayout( )。
public struct a
然后我不太确定这两个**是什么意思? 如果你是指向指针的指针,则 c 方法应如下所示:
dllimport( "" )
public static extern void function( ref a a );或。
public static extern void function( ref a a );
我不太确定,你试试。 因为 c 中的对象 A 实际上是一个指针,然后是 ref,所以它是指针的指针。
-
, record, false);
我想这是因为allochglobal在分配的内存中分配了随机内容,无法删除
如果可以在第二次调用时进行删除,如下所示,记录,true);
-
1、非托管dll中存在bug,...这是网络调用后的错误。
2. 使用 x86 和 x64 平台编译的非托管 DLL。 网络调用后也出现此错误。
最好的方法是找到编写 dll 的人,并连续找到两个人。
-
Const 是一个 C 关键字,用于限定无法更改的变量。
所以,它是 string、ushort、string
c++ c#
word ushort
dword uint
在大多数情况下,可以使用 uchar int byte 代替 int,但如果需要严格对齐,则应使用 bytebyte
uchar* string/intptr
unsigned char* [marshalas(?(intptr)
char* string
lpctstr string
lptstr [marshalas( string
long int
ulong uint
handle intptr
hwnd intptr
void* intptr
int int
int* ref int
int intptr
unsigned int uint
colorref uint
define 在编译阶段完成了替换,基本不占用内存,并且 sink 会一直占用空间,但 define 只是一个简单的替换,很容易造成错误。
在定义宏时,由于要定义的部分必须在一行上,但有时太长,为了便于阅读,用一行来表示换行符,即下一行也是宏的一部分。 >>>More