2009-12-15 5 views

답변

3

비 관리 코드를 호출하려면 Interop을 사용해야합니다.

using System.Runtime.InteropServices; // DllImport 
public class Win32 { 
    [DllImport("User32.Dll")] 
    public static extern void SetWindowText(int h, String s); 
} 

다음은 주제를 자세히 설명하는 기사입니다 (코드의 출처도 포함).

http://msdn.microsoft.com/en-us/magazine/cc301501.aspx

0

상호 운용성에 대한 대안은 기존의 C++ DLL에 대한 래퍼 역할을 CLR 확장을 사용하여 C++ DLL을 작성하는 것입니다. 이렇게하면 비정상적인 유형을 처리 할 수 ​​있습니다. 마샬링이 작동하지 않는 경우 사용자 지정 구조 또는 클래스. (MSDN에 따르면 마샬링 지원 (http://msdn.microsoft.com/en-us/library/bb531313.aspx)을 확장 할 수 있지만이 작업을 직접 시도하지 않았으며 작업 수행에 따라 작업량이 많을 수도 있습니다.

예를 들어 클래스를 내보내는 DLL에 액세스하려는 경우 C++ 클래스의 인스턴스를 소유하고 C++ 클래스에 매핑되는 .NET 클래스를 정의하는 래퍼 DLL을 가질 수 있습니다. 예를 들어, 우리가 .NET에서 사용할 수 우리의 오래된 C++ DLL 중 하나를 만드는 데 사용하는 C++/CLR의 DLL에서 단편이다 :

// This is the constructor for the CLR (managed) object 
FileInf::FileInf() 
{ 
    // Create the C++ (unmanaged) object 
    m_pFileInf = gcnew DILib::FileInf(); 
} 

// This is a managed interface which replicates the old 
// unmanaged functionality 
bool FileInf::IsDirectory() 
{ 
    return m_pFileInf->IsDirectory(); 
} 

상호 운용성은 다음을 고수 작동하면 내가 말하고 싶지만,하지만 난 ' 모든 C++/.NET 인터페이싱 문제를 해결하는 가장 좋은 방법인지 모르겠다.

관련 문제