最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#調(diào)用非托管dll的兩種方式詳解

 更新時間:2025年10月30日 09:54:09   作者:貪嘴  
在開發(fā)過程中,我們經(jīng)常需要調(diào)用一些非托管的DLL庫,比如用Delphi編寫的DLL,本文將介紹兩種在C#中調(diào)用非托管DLL的方法,并通過代碼示例介紹的非常詳細,需要的朋友可以參考下

示例DLL

首先,我們有一個Delphi編寫的DLL,它導(dǎo)出了一個名為MyFunction的方法:

library testDLL;

uses
  SysUtils,
  Dialogs,
  Classes;

{$R *.res}

function MyFunction(param1: Integer): Integer; stdcall;
begin
  Result := param1 + 1;
end;

exports
  MyFunction;

begin
end.

方式一:直接調(diào)用

這是最常見的調(diào)用方式,通過DllImport屬性直接導(dǎo)入非托管方法。

[DllImport("testDLL.dll")]
static extern int MyFunction(int a);

然后,你可以直接調(diào)用這個方法:

int i = MyFunction(123);

方式二:使用本地委托

另一種方法是將非托管方法轉(zhuǎn)換為本地委托。這種方式更靈活,但需要更多的代碼。

輔助方法

首先,我們需要一些輔助方法來加載和卸載DLL:

// 輔助方法:加載DLL
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);

// 輔助方法:卸載DLL
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FreeLibrary(IntPtr hModule);

// 獲取方法指針
[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);

定義委托

接下來,定義一個與DLL中方法參數(shù)一致的委托:

public delegate int MyFunctionDelphiDelegate(int param1);

使用委托調(diào)用方法

最后,使用委托來調(diào)用非托管方法:

void run()
{
    // 加載DLL
    IntPtr dllHandle = LoadLibrary("testDLL.dll");
    if (dllHandle == IntPtr.Zero)
    {
        var err = Marshal.GetHRForLastWin32Error();
    }

    // 獲取方法指針
    IntPtr functionPointer = GetProcAddress(dllHandle, "MyFunction");

    MyFunctionDelphiDelegate my = (MyFunctionDelphiDelegate)Marshal.GetDelegateForFunctionPointer(functionPointer, typeof(MyFunctionDelphiDelegate));
    // 調(diào)用方法
    int i = my(1);

    // 釋放DLL
    FreeLibrary(dllHandle);
}

注意事項

  1. 位數(shù)一致性:確保你的程序和DLL的位數(shù)(32位或64位)保持一致。
  2. 字符串參數(shù):Delphi方法中的參數(shù)和返回值如果是字符串,不能直接使用String類型。需要使用PAnsiCharPChar,并搭配StrNew使用。
  3. 返回值:如果方法返回值為字符串,需要使用IntPtr類型,并通過Marshal.PtrToStringAnsi(strIntPtr)來獲取實際的字符串值。

通過這兩種方式,你可以靈活地在C#中調(diào)用非托管的DLL庫,滿足不同的開發(fā)需求。

到此這篇關(guān)于C#調(diào)用非托管dll的兩種方式詳解的文章就介紹到這了,更多相關(guān)C#調(diào)用非托管dll內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解C#中回調(diào)函數(shù)

    深入理解C#中回調(diào)函數(shù)

    回調(diào)函數(shù)是一種在編程中常用的概念,本文將介紹回調(diào)函數(shù)的概念、語法和應(yīng)用,并討論如何設(shè)計優(yōu)化和重用回調(diào)函數(shù),以及它們在并發(fā)編程中的用途,感興趣的可以了解一下
    2024-02-02
  • C#實現(xiàn)大文件分片上傳完整指南

    C#實現(xiàn)大文件分片上傳完整指南

    本文介紹了大文件分片上傳的核心思路及其在前后端的的實現(xiàn),前端將文件切割成多個小段,逐個發(fā)送到服務(wù)端暫存;服務(wù)端按順序合并還原,文中還詳細描述了數(shù)據(jù)庫設(shè)計、斷點續(xù)傳、合并邏輯、并發(fā)優(yōu)化等方面,并給出了一些注意事項和建議選擇方案,需要的朋友可以參考下
    2026-04-04
  • C#讀取Excel并轉(zhuǎn)化成XML的方法

    C#讀取Excel并轉(zhuǎn)化成XML的方法

    這篇文章主要介紹了C#讀取Excel并轉(zhuǎn)化成XML的方法,實例分析了C#操作Excel及XML文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#?基于NAudio實現(xiàn)對Wav音頻文件剪切(限PCM格式)

    C#?基于NAudio實現(xiàn)對Wav音頻文件剪切(限PCM格式)

    本文主要介紹了C#基于NAudio工具對Wav音頻文件進行剪切,可以將一個音頻文件剪切成多個音頻文件(限PCM格式),感興趣的小伙伴可以學(xué)習一下
    2021-11-11
  • C#面向?qū)ο笤O(shè)計原則之組合/聚合復(fù)用原則

    C#面向?qū)ο笤O(shè)計原則之組合/聚合復(fù)用原則

    這篇文章介紹了C#面向?qū)ο笤O(shè)計原則之組合/聚合復(fù)用原則,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 使用C#代碼實現(xiàn)拆分PowerPoint演示文稿

    使用C#代碼實現(xiàn)拆分PowerPoint演示文稿

    PowerPoint 演示文稿是各類工作和交流中常用的重要工具,本文介紹了如何在 .NET 環(huán)境中使用 C# 拆分 PowerPoint 演示文稿,文章的示例代碼講解詳細,有需要的小伙伴可以參考下
    2026-05-05
  • 在C#中為文本內(nèi)容添加行號的多種方法

    在C#中為文本內(nèi)容添加行號的多種方法

    在C#開發(fā)中,無論是進行代碼審查、分析日志文件,還是生成規(guī)范的文檔報告,為文本內(nèi)容添加行號都是一項常見的需求,本文將深入探討如何在C#中高效、準確地為文本內(nèi)容添加行號的多種方法,幫助你找到最適合自己的解決方案,需要的朋友可以參考下
    2025-11-11
  • C#實現(xiàn)將PPT文檔轉(zhuǎn)換為PDF格式的三種方法

    C#實現(xiàn)將PPT文檔轉(zhuǎn)換為PDF格式的三種方法

    本文介紹了使用C#實現(xiàn)PPT轉(zhuǎn) PDF 的三種實用方法,包括單個文件轉(zhuǎn)換,批量轉(zhuǎn)換以及加密 PDF 轉(zhuǎn)換,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2026-01-01
  • C#編程:List.ForEach與foreach循環(huán)的對比分析

    C#編程:List.ForEach與foreach循環(huán)的對比分析

    這篇文章主要介紹了C#編程:List.ForEach與foreach循環(huán)的對比分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • .Net WInform開發(fā)筆記(二)Winform程序運行結(jié)構(gòu)圖及TCP協(xié)議在Winform中的應(yīng)用

    .Net WInform開發(fā)筆記(二)Winform程序運行結(jié)構(gòu)圖及TCP協(xié)議在Winform中的應(yīng)用

    中午沒事,把去年剛畢業(yè)那會畫的幾張圖翻出來了,大概介紹Winform應(yīng)用程序運行的過程,以及TCP協(xié)議在Winform中的應(yīng)用。感興趣的朋友可以了解下;如果有Windows消息機制等基礎(chǔ),很好理解這兩張
    2013-01-01

最新評論

成都市| 赣州市| 雷州市| 航空| 万年县| 马边| 固安县| 英超| 龙陵县| 白朗县| 墨玉县| 湛江市| 凤山县| 宝应县| 九台市| 翁牛特旗| 鄯善县| 德江县| 刚察县| 乾安县| 新疆| 锡林浩特市| 达尔| 锡林郭勒盟| 天门市| 自贡市| 呼和浩特市| 德保县| 桂阳县| 广西| 什邡市| 根河市| 镇原县| 洱源县| 如皋市| 宣化县| 鄂州市| 仙居县| 晋州市| 宁阳县| 育儿|