从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. 加密分配内存是否返回?
  2. 如果#1为真,则如何分配内存
  3. 你能给出一些关于参数如何工作的基本描述吗?
  4. 我猜所有指针值都代表数组/元素组而不是单个元素正确吗?
 [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);