dll动态链接库【C#】

1说明:

在C#中,dll是添加 【类库】生成的。

2添加C#的dll:

cs 复制代码
(1)在VS中新建一个Windows应用程序项目,并命名为TransferDll。
(2)打开Windows窗体设计器,从工具箱中为窗体添加相应的控件。
(3)在该应用程序的"解决方案资源管理"中的"引用"文件上单击鼠标右键,
在下拉列表中选择"添加引用"项,在弹出的"添加引用"对话框中选择"浏览"选项卡,
在该选项卡中选择AccountDll类库的DLL文件(示例36_02中的AccountDll.dll文件),
单击"确定"按钮。完成动态链接库的添加。
(4)在主窗体的加载事件中调用AccountDll类库的formShow方法,完成登录窗体的调用。代码如下:

AccountDll.Account.public void formShow(string TName, out int n, out string u)

cs 复制代码
"命名空间【AccountDll】对象class【Account】"
AccountDll.Account EncapClass = new AccountDll.Account();    //实例化动态链接库AccountDll

private void Form1_Load(object sender, EventArgs e)
{
    int n = 0;                                        //定义变量,用于记录是否登录成功
    string u = "";                                    //定义变量,用于记录登录的用户名
    //在动态链接库中记当数据库的连接字符串
    "class内,静态变量"
    AccountDll.Account.M_str_sqlcon = "Data Source=.;Database=db_36;User id=sa;PWD=";
    EncapClass.formShow("tb_Logon", out n, out u);        //调用登录窗体
    if (n == 0)                                        //如果登录失败
    {
        Close();                                    //关闭主窗体
    }
    else
    {
        statusStrip1.Items[2].Text = u;                    //显示当前登录的用户名
    }
}

【TName】登录表的名称;【n】登录成功标识;【u】登录成功的用户名。

3添加非C#的dll:

cs 复制代码
在程序开发过程,有时会使用C#调用其他编程语言开发的DLL或调用Windows系统API函数,
由于这些DLL都属于非托管动态链接库(DLL),要调用非托管动态链接库(DLL)则需要使用DllImport属性。

DllImport属性指示该属性化方法由非托管动态链接库(DLL)作为静态入口点公开,
并提供对从非托管DLL导出的函数进行调用所必需的信息。
作为最低要求,必须提供包含入口点的DLL的名称。

在使用DllImport属性前,须引用命名空间System.Runtime.InteropServices。

下面的示例说明如何使用DllImport属性调用非托管的DLL。代码如下:
cs 复制代码
[DllImport("KERNEL32.DLL", EntryPoint = "MoveFileW", SetLastError = True,
CharSet = CharSet.Unicode, ExactSpelling = True,
CallingConvention = CallingConvention.StdCall)]

public static extern bool MoveFile(String src, String dst);
cs 复制代码
CallingConvention    指示入口点的调用约定
CharSet           指示如何向方法封送字符串参数,并控制名称重整
EntryPoint      指示要调用的DLL入口点的名称或序号
PreserveSig     指示签名是否为非托管入口点的直接转换
SetLastError    指示被调用方在从属性化方法返回之前是否调用 SetLastError Win32 API 函数

案例:

cs 复制代码
using System.Runtime.InteropServices;
namespace DelphiDll
{
    public partial class Form1 : Form
    {
        public class cCdll
        {
            [DllImport("projectdll.dll", EntryPoint = "Sum", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
            public static extern double Sum(double x, double y);
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox3.Text = cCdll.Sum(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text)).ToString();
        }
    }
}
相关推荐
SeaTunnel1 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影2 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code2 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121313 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城4 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience5 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao5 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
爱喝水的鱼丶5 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
脱胎换骨-军哥6 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
songroom6 小时前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust