2009-12-15 26 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

到互操作的替代方法是使用寫CLR擴展一個C++ DLL充當包裝到傳統的C++ DLL。這給你一個處理異常類型的機會,例如自定義結構或類,如果Marshaling不起作用。 (根據MSDN,你可以擴展Marshaling的支持(http://msdn.microsoft.com/en-us/library/bb531313.aspx),但我沒有親自嘗試過,取決於你在做什麼,這可能是很多工作)。

例如,如果您要訪問導出類的DLL,您可以擁有一個包裝器DLL,它擁有C++類的實例並定義映射到C++類的.NET類。例如,下面是來自我們用它來製作可我們的老C++ dll的一個.NET中的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接口問題的最佳方法,並且這是一種替代方案。

相關問題