【发布时间】:2014-04-11 13:35:10
【问题描述】:
我可能自己都搞糊涂了,但以前没有这样做过,一些指导会很有帮助。
我正在尝试从C# 应用程序中调用一些C 代码。我尝试过使用PInvoke,但发现它有点棘手。我想我会尝试做一个C++\CLI 包装器。
有一些复杂的结构,它们有可变长度的双数组,PInvoke 很难处理。
我已经阅读了一些关于这是如何完成的,但我无法弄清楚。我发现的大部分内容都与包装C++ 而不是C 有关。 C 代码已经在导出它的函数,这些函数已经在 Java 应用程序及其 JNA 服务中工作。我有C 代码、标头、库和 dll,但我宁愿不对现有的任何内容进行更改,以免打扰其他消费应用程序。调用它的C# 应用程序将是 64 位的,大多数示例都是创建 win32 库,这有关系吗?
更新:在下面添加代码:
注意:这只是几个功能之一,可能是最简单的一个,但它们都非常相似。
C HEADER:
typedef struct myStruct_t
{
double prefix[8];
int length;
double array[1];
}
myStruct;
C:
extern "C" __declspec( dllexport ) myStruct *doSomething(const myStruct *input, double a)
{
myStruct *output;
//doSomething
return output;
}
【问题讨论】:
-
Win32 是 32 位和 64 位版本的 Windows 中 Windows API 的通用名称。如果 C# 应用程序是 64 位的,那么您使用的 DLL 必须是 64 位的。是吗?
-
c dll是64位的,c++\cli wrapper dll的win32位让我觉得是32位