[英]C# importing C++ dll
我有一個托管 dll 文件,它將函數從 C++ dll 導入托管環境。 我在我的程序中使用了它的一些功能,但問題是,當我使用它時出現這個錯誤:
無法加載 DLL 'Libraries\lib.dll':找不到指定的模塊。 (來自 HRESULT 的異常:0x8007007E)
我將 .dll 文件放在程序目錄和 system32 文件夾中。 但是,它仍然不起作用。 我想我必須使用 DLLImport 但我不知道如何使用它.. 即使看了一些例子我仍然感到困惑。 有人可以在這里幫助我嗎?
你說:
我將 .dll 文件放在程序的目錄中...
但:
無法加載 DLL 'Libraries\lib.dll'
我們需要查看您的DLLImport
屬性創建,即本機方法的 C# 簽名。 在我看來,您可能指定了路徑,即
[DllImport( "Libraries\lib.dll" )];
static extern void MyNativeMethod();
嘗試改用這個:
[DllImport( "lib.dll" )];
static extern void MyNativeMethod();
這將搜索運行目錄以及您的PATH
環境變量。 如果您像以前一樣指定文件路徑,老實說,如果找不到文件,我真的不知道它是否會通過PATH
搜索(我在docs中找不到提及它)。
這里沒有足夠的信息來提供幫助,因為您沒有顯示您嘗試導入的 API(在本機代碼中)等。
話雖如此,我強烈建議閱讀Platform Invoke Tutorial以及A Closer Look at Platform Invoke on MSDN。 他們介紹了主要問題,並展示了許多如何從 C++ DLL 導入和使用函數的示例。
在 c# 中使用 c++ dll 文件的最佳和最簡單的方法:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace demo1
{
class Program
{
[DllImport("shi.dll", EntryPoint = "?HelloWorld@@YAXXZ")]
public static extern int HelloWorld();
public static void Main(string[] args)
{
//Console.WriteLine(StringUtilities.HelloWorld());
Console.WriteLine(HelloWorld());
// public static extern void HelloWorld();
// HelloWorld();
// Console.ReadKey();
}
}
}
我在使用不同的 .dll 文件時遇到了同樣的問題,解決方案是將目標更改為 x64 而不是 x86
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.