古詩詞大全網 - 藝術簽名 - c++怎樣封裝dll給c#調用

c++怎樣封裝dll給c#調用

using System.Runtime.InteropServices;

[DllImport( "KERNEL32.DLL",

EntryPoint="MoveFileW",

SetLastError=true,

CharSet=CharSet.Unicode,

ExactSpelling=true,

CallingConvention=CallingConvention.StdCall

)

]

public static extern bool MoveFile(String src, String dst);

參數說明:

EntryPoint 指定要調用的 DLL 入口點。

SetLastError 判斷在執行該方法時是否出錯(使用 Marshal.GetLastWin32Error API 函數來確定)。

C#中默認值為 false。

CharSet 控制名稱及函數中字符串參數的編碼方式。默認值為 CharSet.Ansi。

ExactSpelling 是否修改入口點以對應不同的字符編碼方式。

CallingConvention 指定用於傳遞方法參數的調用約定。默認值為 WinAPI。

該值對應於基於32位Intel平臺的 __stdcall。

BestFitMapping 是否啟用最佳映射功能,默認為 true。

最佳映射功能提供在沒有匹配項時,自動提供匹配的字符。

無法映射的字符通常轉換為默認的“?”。

PreserveSig 托管方法簽名是否轉換成返回 HRESULT,默認值為 true(不應轉換簽名)。

並且返回值有壹個附加的 [out, retval] 參數的非托管簽名。

ThrowOnUnmappableChar 控制對轉換為 ANSI '?' 字符的不可映射的 Unicode 字符引發異常。

IntPtr 類型的說明

對於平臺調用,應讓參數為 IntPtr 類型,而不是 String 類型。使用 System.Runtime.InteropServices.Marshal 類所提供的方法,可將類型手動轉換為字符串並手動將其釋放。

IntPtr 類型被設計成整數,其大小適用於特定平臺。

在 32 位硬件和操作系統中將是 32 位;

在 64 位硬件和操作系統中將是 64 位。

IntPtr 類型由支持指針的語言使用,並作為在支持與不支持指針的語言間引用數據的壹種通用方式。它也可用於保持句柄。例如,IntPtr 的實例廣泛地用在 System.IO.FileStream 類中來保持文件句柄。

IntPtr 類型符合 CLS,而 UIntPtr 類型卻不符合。只有 IntPtr 類型可用在公***語言運行庫中。此類型實現 ISerializable 接口。