vs2017、net4、无法引用?
报错:请确保此文件可访问并且是一个有效的程序集或com组件
是Delph动态链接库的问题吗?
也把dll放bin同目录底下啦
请有经验的大佬指点一手
确保你的 DLL 文件已注册到系统中。如果没有注册,你可以使用 regsvr32 命令将其注册到系统中。在命令行窗口中执行以下命令:regsvr32 "path_to_dll_file",其中 "path_to_dll_file" 是指向 Delphi DLL 文件的完整路径和文件名。
如果以上没有解决问题,你可以尝试使用 Dependency Walker 工具来检查 DLL 文件中是否存在依赖关系错误。如果依赖项缺失或无法找到,这也会导致无法正确调用 DLL 函数。
一、Delphi7=>File=>New=>Other=>DLL Wizard,然后输入以下代码:
复制代码
library dllres;
uses
SysUtils, Classes,Dialogs;
{$R *.res}
function Plus(x, y: integer): Integer; stdcall;
begin
Result:= x + y;
end;
procedure Hello( a, b:WideString; out return : WideString) ;stdcall
begin
return:= a+ b;
end;
exports
Plus,Hello;
begin
end.
复制代码
按Ctrl+F9生成dll
二、C# 中新建Winform程序,设置目标框架为x86
1、把Delphi生成的dll复制到C#的exe文件夹下
2、在C# 中添加如下代码:
复制代码
/// <summary>
/// C# 调用Delphi Dll的样例
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//调用求和的方法
int a = Plus(1, 2);
string ip = "ABCDEF老天____";
string workOrder = "REA22C100A";
//调用返回字符串的方法
string result;
Hello(ip, workOrder, out result);
//为了设置个断点,多写下面这句代码
int x = 2;
}
/// <summary>
/// 引入Delphi的求和方法
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[DllImport(@"dllres.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int Plus(int x, int y);
/// <summary>
/// 引入Delphi的返回字符串的方法
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <param name="result"></param>
[DllImport(@"dllres.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern void Hello(
[MarshalAs(UnmanagedType.BStr)]string a,
[MarshalAs(UnmanagedType.BStr)]string b,
[MarshalAs(UnmanagedType.BStr)]out string result);
}
复制代码
参考文献:
https://www.appsloveworld.com/csharp/100/154/using-delphi-dll-in-c
https://www.cnblogs.com/nirvanan/articles/16992861.html
首先确认delph的dll是com组建还是直接导出api的非com组建;
确认方式:使用depends查看导出的api
如果是com组建,看是否已经注册到系统;
如果是纯api,可以用dllimport使用api
如果您想在.NET Framework 4中引用一个Delphi动态链接库(DLL),您需要确保该DLL是.NET兼容的,并且包含可以在.NET项目中使用的公共类型或COM组件。
如果您无法成功引用该DLL,并且收到"请确保此文件可访问并且是一个有效的程序集或COM组件"的错误消息,可能有以下几个原因:
DLL不是.NET兼容的:确保该DLL是使用Delphi编译为.NET程序集,并且符合.NET的规范。如果DLL是使用非托管代码编译的,您将无法直接在.NET项目中引用它。
DLL文件不可访问:确保DLL文件的路径是正确的,并且您具有足够的权限来访问该文件。有时,文件路径中包含特殊字符或空格可能导致访问问题。
DLL文件损坏或缺少依赖项:确保DLL文件没有损坏,并且它的依赖项已正确安装。您可以使用依赖项查看器(Dependency Walker)等工具来检查DLL的依赖项。
如果您确定DLL是.NET兼容的,并且文件可访问且没有损坏或缺少依赖项,但仍无法引用它,请尝试以下解决方案:
使用Interop技术:如果该DLL是一个非托管的COM组件,您可以使用Interop技术(COM互操作性)来在.NET项目中引用它。在Visual Studio中,您可以使用“添加引用”对话框中的“COM”选项来添加该DLL作为COM组件。
手动注册DLL:如果DLL是一个COM组件,您可能需要手动注册它。您可以使用Regsvr32命令行工具来注册COM组件。
请注意,以上只是一些常见的解决方案,具体取决于您的DLL和项目的特定情况。如果问题仍然存在,建议查阅DLL的文档或联系DLL的提供者以获取更详细的支持。