在C#中调用一个用C写的DLL(负责接收网关短信), 里面有一个函数的原型定义如下:int WINAPI GetDeliver(ULONG* sm_ID, unsigned char* DestTON, char* DestAddr, char* UserData, ...);参数太多,不一一列举,主要有UNLONG* ,unsigned char* ,char* 这几个数据类型,其中DestAddr是用来接收11位手机号码,UserData则是收到的短信内容..用Dllimport包装了DLL后重新写一遍该函数的定义,如下:public static extern int GetDeliver(out uint sm_ID, out byte DestTON, out char DestAddr, out string UserData, ...);之中的数据类型我用了uint代替ULONG*,用byte代替unsigned char* ,问题在于“char*”我无论用long或char或是string都不能正常接收,不知道到底该用什么样的数据类型才合适???请各路大虾慷慨襄助!也欢迎讨论!先谢谢啦~~~
对应的是字符还是字符数组,如果是字符数组,我喜欢这么写Byte[] DestTON, Char[] DestAddr,...
char*:[MarshalAs(UnmanagedType.LPTStr)] string如果是out参数的话,可以用
char*:[Out,MarshalAs(UnmanagedType.LPTStr)] string
---------------
ULONG*应该是unsigned long *
char *也是一样的问题
指针和值怎么能混为一谈呢?
如果你用C#应该用IntPtr
---------------这个说法对吗,是不是一定要用指针?
---------------
ULONG*应该是unsigned long *
char *也是一样的问题
指针和值怎么能混为一谈呢?
如果你用C#应该用IntPtr
---------------
这个说法对吗,是不是一定要用指针?这个要看函数中如何用的,根据函数的不同,有时候处理的手法也不同。
memset(sUserData, 0, MAX_UD_LEN);...i = GetDeliver(...sUserData...)
int GetDeliver(ref System.UInt32 sm_ID,
StringBuilder DestTON,
StringBuilder DestAddr,
StringBuilder UserData,
...
);
http://community.csdn.net/Expert/TopicView3.asp?id=4799900即用IntPtr来替换char*,然后用Marshal.PtrToStringAnsi来读出string。