调用从C#C ++函数

我有2个C ++的DLL。 其中一个包含以下功能:

void init(const unsigned char* initData, const unsigned char* key)

另一种包含此功能:

BYTE* encrypt(BYTE *inOut, UINT inputSize, BYTE *secretKey, UINT secretKeySize).

有没有一种方法调用从C#这2个功能? 我知道你可以用[的DllImport]在C#中调用C ++函数,但是指针给了我一个困难时期。

任何帮助,将不胜感激!

--------------解决方案-------------

是的,你可以从C#调用这两个假设,它们被包裹在外部的“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);

分类:C# 时间:2012-08-07 人气:0
本文关键词: C#,DLL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.402 (s). 9 q(s)