二次开发库Demo【C#】

1厂家会提供几个文件

文件【xxx.h】和【xxx.lib】和【xxx.dll】

xxx.h      文件包含 【函数方法名】 ,用于程序内调用

xxx.lib    用于添加依赖项

xxx.dll    动态链接库

2使用方法:

首先,把库函数文件都放在工作目录下。

库函数文件总共有三个文件:
ControlCAN.h、
ControlCAN.lib、
ControlCAN.dll 
和一个文件夹 kerneldlls。

h文件操作:

在扩展名为.CPP 的文件中包含 ControlCAN.h 头文件。
如:#include “ControlCAN.h”

lib文件操作:

在工程的连接器设置中连接到 ControlCAN.lib 文件。
如:在 VC7 环境下,

在项目属性页里的配置属性→连接器→输入→附加依赖项中
添加 ControlCAN.lib

dll文件操作:

C#环境:
文件放在debug文件夹下。

3加载二次开发库函数:

[DllImport("winmm.dll")]
private static extern long mciSendString(string a,string b,uint c,IntPtr d);
[DllImport("KERNEL32.DLL", EntryPoint = "MoveFileW", SetLastError = True,
CharSet = CharSet.Unicode, ExactSpelling = True,
CallingConvention = CallingConvention.StdCall)]
 
public static extern bool MoveFile(String src, String dst);

我们常用到的dll文件User32.dllkernel32.dll两个文件。

3、C#如何调用Win32 API函数?
C#语言也使用dll动态链接库,不过这些dll都是.NET版本的,具有“自描述性”,也就是自己肚子里都有哪些函数都已经写在自己的metadata里了,不用再附加一个.h文件来说明。

现在,我们已经找到了问题的关键点:如何用.NET平台上的C#语言来调用Win32平台上的dll文件。答案非常简单:使用DllImport特性。
搜索“Windows API Index”,一步步查找

using System;
using System.Runtime.InteropServices;//必须引入的【运行时.交互服务】(运行时的交互服务不就是“动态链接”吗?感谢Microsoft!)
class Program
{
    [DllImport("User32.dll")]//制造一个DllImport类的实例,并把这个实例绑定在我们要使用的函数上!
    public static extern int MessageBox(int h, string m, string c, int type);


    static int Main()
    {
        MessageBox(0, "内容:Hello Win32 API", "标题:风格0", 0);
        MessageBox(0, "内容:Hello Win32 API", "标题:风格1", 1);
        MessageBox(0, "内容:Hello Win32 API", "标题:风格2", 2);
        MessageBox(0, "内容:Hello Win32 API", "标题:风格3", 3);
        MessageBox(0, "内容:Hello Win32 API", "标题:风格4", 4);

        Console.ReadLine();
        return 0;
    }
}

https://star-302.blog.csdn.net/article/details/127259896

调用 Beep() API 来发出声音

BOOL Beep( 
DWORD dwFreq,   // 声音频率 
DWORD dwDuration  // 声音持续时间 
); 
[DllImport("kernel32.dll")]
public static extern bool Beep(int frequency, int duration); 
using System;
using System.Runtime.InteropServices;
namespace Beep
{
    class Class1
    {
        [DllImport("kernel32.dll")]
        public static extern bool Beep(int frequency, int duration);
        static void Main(string[] args)
        {
            Random random = new Random();// 随机数
            for (int i = 0; i < 10000; i++)
            {
                Beep(random.Next(10000), 100);
            }

            Console.WriteLine("End");
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值