这是我第一次在这里提问,虽然我经常使用这个网站!!
所以在我搜索了一段时间后,我发现了这个: http ://tigerang.blogspot.pt/2008/09/reverse-pinvoke.html
我认为这几乎是我想做的。我现在将解释:(请注意,我是 c++ 的新手,c#,我来自 java)我在 Visual Studio 上有一个解决方案,有两个项目,非托管 c++ 和一个 C# WPF 应用程序。c++ 只有一个类,使用 OpenCV 进行一些处理。WPF 类连接到图像,检索一些 (x,y) 点,我必须将它们传递给 c++。之后我将从 WPF 端调用一个 C++ 函数,在那里我将得到我的结果。
所以我现在的问题是,我想通过一个点列表(列表),但我无法根据我的情况调整我看到的示例,我发现关于这个的文档非常少(或者我可能太新手而且我不知道如何找到/使用它)。
示例代码:C#
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct Ponto
{
public double x;
public double y;
}
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate List<Ponto> CallBackDelegate();
public class ManagedClass
{
private CallBackDelegate _delegate;
public List<Ponto> vectorp;
public ManagedClass()
{
_delegate = new CallBackDelegate(this.Foo);
}
public CallBackDelegate GetDelegate()
{
return _delegate;
}
public List<Ponto> Foo()
{
//do shit
Ponto p1 = new Ponto();
p1.x = 10;
p1.y = 2;
Ponto p2 = new Ponto();
p2.x = 5;
p2.y = 7;
Ponto p3 = new Ponto();
p3.x = 3;
p3.y = 8;
vectorp.Add(p1);
vectorp.Add(p2);
vectorp.Add(p3);
return vectorp;
}
}
示例代码 C++;
#include <iostream>
#pragma once
#include <windows.h>
#include <list>
#define INTEROPBRIDGE_API __declspec(dllexport)
INTEROPBRIDGE_API void fnInteropBridge(list<Ponto> data) //IM GETTING ERRORS HERE
{
ManagedLib::ManagedClass^ c = gcnew ManagedLib::ManagedClass();
IntPtr p = Marshal::GetFunctionPointerForDelegate(c->GetDelegate());
NativeToManaged funcPointer = (NativeToManaged) p.ToPointer();
// invoke the delegate
funcPointer(data);
}
// data structure for the callback function
struct Ponto
{
double x;
double y;
};
// callback function prototype
typedef void (*NativeToManaged)(list<Ponto> data);
using namespace std;
void main()
{
cout << "Hello World!" << endl;
cout << "Welcome to C++ Programming" << endl;
}