2008-11-05 3 views
3

누군가가 이것을 도와 줄 수 있기를 바랍니다. 저는 주로 C# 개발자이므로 C 및 C++ 기술이 좋지 않습니다. 나는 큰 응용 프로그램의 플러그인 인 기본 C DLL이 있습니다. 나는 gcc를 사용하여 리눅스에서 windows 용 dll을 으로 컴파일한다.C에서 C#으로 혼합 모드 C++ 브리지 만들기?

원시 DLL에서 D3DSurface를 만들 때 혼합 모드 C++ dll에서 함수를 호출하고 Hwnd/handle을 사용하여 의 표면을 가리키는 포인터를 전달하려고합니다. 그런 다음 혼합 모드 C++에서 내 C# 관리 코드를 호출해야합니다.

예를 들어, C에서 다음을 원합니다. C#에서

Hwnd handle; 
LPDIRECT3DSURFACE d3dtarg; 
SurfaceCreated(handle, d3dtarg); 

나는

public static class D3DInterop 
{ 
    public static void SurfaceCreated(IntPtr handle, IntPtr surface) 
    { 
     //do work 
    } 
} 

나는 C++에서 빨아 때문에, 나는 그냥 내가 코드에 필요한 누군가가 나에게의 예를 들어 줄 수 있는지 알고 싶은 혼합 모드 어셈블리에서 호출이 원하는 혼합 모드 dll에 대해. 나는 을 directx 헤더가있는 혼합 모드 dll을 컴파일 할 필요가 없으므로 거기에 'C'LPDIRECT3DSURFACE를 일반 포인터로 캐스팅 할 수있는 방법이 있습니까? C#에서는 어쨌든 IntPtr을 사용합니다.

답변

1

Microsoft XNA을 들여다 보았습니까? 그것은 아마 DirectX에 대한 래퍼를 관리합니다.

0

혼합 모드 DLL에서 void *을 사용할 수 있습니다. 어떤 포인터 (IDirect3DSurface에 대한 포인터 포함)에서 void *으로 암시 적 캐스트가 있습니다. 그런 다음 해당 포인터를 IntPtr으로 전송할 수 있습니다.

2

C에서 호출 할 수있는 관리되는 C++ (C++/CLI) DLL 프로젝트를 만들고 다른 .NET 어셈블리 (즉 C#의 것)를 참조 할 수도 있습니다. 그렇다면 C++/CLI 브릿지는 데이터 유형을 HWND에서 IntPtr로 변환하는 것입니다.

관련 문제