1
C#의 DLL에서 C 함수를 호출하기 만하면됩니다. 이 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