• C#中使用DLL相关问题


    一,C#调用 C/C++ 库函数

    1,UNITY的C# VS工程常常打不开 属性页,右键工程无 【添加引用】项。原因是VS的自带工具【适用于UNITY的工具】导致的。

    解决办法:VS-【工具】-【选项】-【适用于UNITY的工具】-【杂项】-【访问项目属性】改为true,然后重启VS, 就可以打开项目属性了

    2,C#工程的属性页与C++相差很大,它没有文件目录的设置项,没有LIB文件的添加和目录项,因此,C#工程使用库文件只有一种方式:添加引用,

    且C#只能引用DLL,不能引用LIB

    3,添加引用时,C#工程一定要添加引用才能使用DLL,就算你的DLL在工程中任何位置不添加引用也不能用,这很明显,就像C++工程中不添加LIB及其目录则不能用一样

    添加引用只是告诉IDE该到哪里去取这个DLL,

    4,在代码中声明导出函数【注意导出函数必须是 static extern的】

     [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
     public unsafe static extern bool ZeroMemory(byte* destination, int length);

    关于静态链接库和动态链接库:

    静态链接库只有一个.LIB文件,使用时 : 工程中添加.lib并指定lib目录,代码中包含.h或只接声明lib中的函数名然后使用

    动态链接库可以只生成一个dll而不生成lib,这样使用时只能使用 系统函数loadlibary()来加载这个dll,并从中导出想要使用的函数。

    动态链接库常用的使用方式是生成一个lib和一个dll,使用时 : 工程中添加.lib并指定lib目录,代码中包含.h或只接声明lib中的函数名然后使用

     二,C#调用 C# 库

    C#的库只有动态链接库DLL,且调用极为简单,只需要添加引用,然后在程序中像使用一个源码类那样使用它,不需要 DllImport标签来导入函数,示例如下:

    //DLL,创建一个库工程,添加如下代码,编译生成了ClassLibaray1.DLL
    namespace
    ClassLibrary1 { public class Class1 { public void Print(string s) { Console.WriteLine(">> {0}", s); } } }
    //工程中添加引用,将ClassLibaray1.dll添加到工程中
    //使用
    ClassLibaray1.DLL

    using
    ClassLibrary1; namespace uselib { public class myclass { static void Main() { var osp = new sp1class(); osp.Print("10"); Class1 oc1 = new Class1(); oc1.Print("ddd"); } } }

    另外参考:

    1,将CS脚本打成DLL并在UNITY中使用

    https://blog.csdn.net/qq_25210959/article/details/53285403

    2,将UNITY 的DLL打进自己的DLL中?

    https://blog.csdn.net/suifcd/article/details/48248015

  • 相关阅读:
    DOM对象模型接口规范中的四个基本接口
    js中几种实用的跨域方法原理详解(转)
    关于ie6/7下的z-index
    Mysql++学习(五)------专用SQL结构
    Mysql++学习(四)------模板查询
    Mysql++学习(三)------举个栗子
    Mysql++学习(二)------Mysql++简述
    Mysql++学习(一)------mysql编译安装
    epoll模型实例
    锁、页类型
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/9379312.html
Copyright © 2020-2023  润新知