gpt4 book ai didi

c# - 包装 C++ 函数以在 C# 中使用

转载 作者:行者123 更新时间:2023-11-30 04:27:50 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
A call to PInvoke function '[…]' has unbalanced the stack

我试图包装一些用 C++ 编写的函数,以便在 C# 程序(WPF,或作为控制台应用程序的示例)中使用它们,但会出现运行时异常。

我想这是一个编译问题(C# 项目的 c++ 项目)。当我更改 C# 项目的平台目标时,出现不同的异常。当平台目标是 x64 时,我得到

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

当我尝试将其编译为 x86 时,我得到:

A call to PInvoke function 'Wrapper!Wrapper.IWrapper::create' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

我在 windows 7 64 上运行 VS2010。

很高兴有任何关于如何解决这个问题的想法。

这就是我所做的:

C++代码。 cpp:

int create(int Handle)
{
return 1;
}

和h:

#define EXPORT_DLL __declspec(dllexport)

extern "C"
{
EXPORT_DLL int create(int Handle);
}

然后在第二个 C# 项目中,我调用这个 dll,其中 c++ 项目的名称是 wrapAttemptC

namespace Wrapper
{
internal class IWrapper
{
const string SHADOW_DLL_NAME = "wrapAttemptC.dll";

[DllImport(SHADOW_DLL_NAME)]
public static extern int create(int Handle);
}
public class CWW
{
public CWW(){}

public int Connect(int cam)
{
return IWrapper.create(cam);
}
}
}

然后,我将在c++项目中创建的DLL文件放入这个c#项目和应用程序c#项目(WPF)的bin/Debug中,并尝试调用

CWW cww = new CWW();
cww.Connect(5);

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com