1
C#のDLLからC関数を呼び出すだけです。このC関数は構造体を返します。ここでCで関数を呼び出して戻り値として構造体を返す
CのDLLの.hのファイルの宣言:
typedef struct t_Point{
int x;
int y;
} Point;
Point myFuncs();
は、今私はC#で、この機能を使用します。 Wrapper.cs:
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp_mit_OpenCV
{
[StructLayout(LayoutKind.Sequential)]
public struct Point
{
public int x;
public int y;
};
class Wrapper
{
[DllImport("OpenCV Test.dll", CharSet= CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Struct)]
public static extern Point myFuncs();
}
}
次のように使用がある:
Point p = Wrapper.myFuncs();
(ネーミングは、おそらく最良ではない)
myFuncsのみ、構造体を宣言Xにいくつかの値を置くとyとそれを返します。問題:C#で得られる値は、C関数で生成された値とは異なります。 4と2で、0と111226272です。ここで問題は何ですか?
ありがとうございました!
型の違いがあると思います: 'int'の代わりにC#' short'を試し、 'uint'または' ushort'を試してみてください。プロセスによって出力されたバイトを投稿できますか(C#が構造体を作成しようとする前に)? –
いつも111226272が返ってくるのですか、それとも毎回違うのですか? –
呼び出し規約が正しいことを忘れないでください(cdecl/fast-callなど)。ここをクリックしてください:http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx – plinth