首页 新闻 会员 周边 捐助

C#调用Delphi动态库

0
悬赏园豆:100 [待解决问题]

dephi动态库Lee.dll有方法function GetFileList:WideString;stdcalll;
在C#中如何使用该方法?

旷野无垠的主页 旷野无垠 | 初学一级 | 园豆:102
提问于:2024-10-15 16:52
< >
分享
所有回答(2)
0

chatgpt 告诉我的

    // 声明外部的Lee.dll并定义GetFileList方法
    [DllImport("Lee.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
    public static extern string GetFileList();
czd890 | 园豆:14484 (专家六级) | 2024-10-15 17:29
0

需要通过 DllImport 引用该 DLL,并正确映射方法签名。先准备 DLL 文件确保 Lee.dll 文件位于项目的运行路径中,或将其路径添加到系统 PATH 环境变量中。
C# 代码

using System;
using System.Runtime.InteropServices;

class Program
{
    // 引用DLL中的方法
    [DllImport("Lee.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
    public static extern string GetFileList();

    static void Main(string[] args)
    {
        try
        {
            // 调用方法并输出结果
            string fileList = GetFileList();
            Console.WriteLine("文件列表: " + fileList);
        }
        catch (Exception ex)
        {
            Console.WriteLine("调用 DLL 失败: " + ex.Message);
        }
    }
}

注意事项,DllImport 参数:CharSet.Unicode:确保字符串使用 WideString(即 UTF-16 编码)。
CallingConvention.StdCall:匹配 Delphi 中的 stdcall 调用约定。确保 DLL 文件路径正确,否则会抛出 DllNotFoundException。
32位/64位兼容性:确保C# 程序和 DLL 都是相同的位数(32位或64位)。如果你的 DLL 是 32 位,要将项目的目标平台设置为 x86。

五号位 | 园豆:344 (菜鸟二级) | 2024-10-15 20:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册