读书人

C#调用VC++dll有关问题

发布时间: 2012-05-10 16:02:39 作者: rapoo

C#调用VC++dll问题
C#无法直接引用VC++编译的dll。虽然可以使用DllImport加载调用,但必须进行相应转换。
在dll中有int IPC_Init(int Init)和int IPC_Cleanup();
经过相应的转换后可以调用成功,如下

[DllImport("..\\lib\\SDK.dll")]
public static extern int IPC_Init(int Iit);
[DllImport("..\\lib\\SDK.dll")]
public static extern int IPC_Cleanup();

出现以指针的方法,转换失败.
IPC_Login(char* CamerIP,int dataer);


在网站也找了一些资料。说指针可以使用ref CamerIP这样可以解决。但经过测试也不行。
C#使用指针要启用非安全代码并且要用unsafe包括住。但几经尝试也失败。或许是思路是错的!
请问如何解决像C#调用VC++使用指针方法。希望大家给点思路或者资料。Demo也可以!之前没有接触过。谢谢!

[解决办法]

C# code
IPC_Login(char* CamerIP,int dataer);
[解决办法]
C/C++ code
IPC_Login(char* CamerIP,int dataer);
[解决办法]
C#里有提供一个专门用于平台指针调用的类型 Inptr 再用System.Runtime.InteropServices.Marshal类的方法进行转换,例如:
C# code
[System.Runtime.InteropServices.DllImport("Encrypt1.dll", CharSet = System.Runtime.InteropServices.CharSet.Ansi, CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]        public static extern IntPtr Encode(IntPtr message);//这里相当于C++的char*string msg = "aksdjfk";            IntPtr inPtr = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(msg);            IntPtr outPtr = Common.Encrpty.Encode(inPtr);            string msg1 = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(outPtr); 

读书人网 >C#

热点推荐