从C#调用C ++函数
我有2个C ++ DLL。 其中一个包含以下function:
void init(const unsigned char* initData, const unsigned char* key)
另一个包含此function:
BYTE* encrypt(BYTE *inOut, UINT inputSize, BYTE *secretKey, UINT secretKeySize).
有没有办法从C#调用这两个函数? 我知道你可以在C#中使用[DllImport]来调用C ++函数,但指针给了我很多时间。
任何帮助,将不胜感激!
是的,您可以从C#中调用这两个,假设它们包含在extern“C”部分中。 我不能给你一个详细的PInvoke签名,因为我没有足够的信息来说明各种参数是如何相关的,但以下内容是可行的。
[DllImport("yourdllName.dll")] public static extern void init(IntPtr initData, IntPtr key); [DllImport("yourdllName.dll")] public static extern IntPtr encrpyt(IntPtr inout, unsigned inuputSize, IntPtr key, unsigned secretKeySize);
允许我们创建更好签名的信息
- 加密分配内存是否返回?
- 如果#1为真,则如何分配内存
- 你能给出一些关于参数如何工作的基本描述吗?
- 我猜所有指针值都代表数组/元素组而不是单个元素正确吗?
[DllImport("yourdll.dll")] static extern void init([MarshalAs(UnmanagedType.LPArray)] byte[] initData, [MarshalAs(UnmanagedType.LPArray)] byte[] key); [DllImport("yourdll.dll")] static extern IntPtr encrypt([MarshalAs(UnmanagedType.LPArray)] byte[] inOut, int inputSize, [MarshalAs(UnmanagedType.LPArray)] byte[] key, int secretKeySize);
对于课程,您不需要做任何特殊的事情。 对于值类型,您需要使用ref关键字。
MSDN有一篇文章总结了这一点: http : //msdn.microsoft.com/en-us/library/awbckfbz.aspx
对于指针,您要使用的是IntPtr 。
[DllImport("whatever.dll")] static extern void init(IntPtr initData, IntPtr key);