このサイトをよく利用していますが、ここで質問するのは初めてです!
しばらく検索した後、これを見つけました: http: //tigerang.blogspot.pt/2008/09/reverse-pinvoke.html
それが私がやりたいことのほとんどだと思います。ここで説明します:(PLZ注私はc++、c#、javaから来ています)私は2つのプロジェクト、アンマネージドc ++とC#WPFアプリを備えたビジュアルスタジオのソリューションを持っています。c ++にはクラスが1つだけあり、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;
}