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("");
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
C#中使用DLL相关问题的更多相关文章
- 在VS2012中采用C++中调用DLL中的函数 (4)
这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...
- 【windows核心编程】DLL相关(2)
关于DLL的延迟加载 延迟加载DLL,使用的是隐式加载方式,当为exe使用的DLL指定为延迟加载的时候,连接器会将exe的[导入段]中去除该DLL的相关信息,同时在exe中嵌入一个新的[延迟加载段]表 ...
- 【windows核心编程】DLL相关(1)
DLL相关的东西 1.DLL的加载方式 隐式: #pragma comment(lib, "XX.lib"); 编译器去查找名为XX.dll的DLL,除了名字相同,该DLL和该LI ...
- windows应用中调用DLL一步步试验
试验环境: PC:win10 build 10143 IDE: vs2015 RC WinPhone: win10 build 10136 简单界面,点按钮,算加法 一.主程用C++ 1.新建visu ...
- [转载]解析WINDOWS中的DLL文件---经典DLL解读
[转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...
- Unity中调用DLL库
DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...
- 关于QT建立项目中遇到的相关问题的处理办法
关于QT建立项目中遇到的相关问题的处理办法 1.在QTCreater中新建一个空的工程时,第一次运行会抱一个错误,如下: -1: error: LNK1123: 转换到 COFF 期间失败: 文件无效 ...
- 【原创】在VS2012中采用C++中调用DLL中的函数(4)
这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...
- 在VS2012中采用C++中调用DLL中的函数(4)
转自:http://www.cnblogs.com/woshitianma/p/3683495.html 这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天 ...
随机推荐
- windows使用git记录
1.免密码clone远程服务器代码开启ssh 生成私钥公钥 命令:查看自己配置的邮箱 git config user.name git config user.email 生成密钥:邮箱填写上面查看出 ...
- 移动web开发适配方案之Rem
移动端为什么要做适配 移动端相对PC端来说大部分浏览器内核都是基于Webkit的,所以大部分都支持CSS3的最新语法.但是由于手机的屏幕尺寸和分辨率都不太一样(尤其是安卓),所以不得不对不同分辨率的手 ...
- java读取和写入浏览器Cookies
首先我们认识下什么是cookies: cookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器存在本地的cookie web应用一般 ...
- Ubuntu下XTerm乱码问题的解决及XTerm的简单配置
本人比较喜欢Ubuntu这个Linux的发行版,主要是安装程序插件什么的都比较方便,推荐新手使用,可以免去很多麻烦的配置,将注意力放在编程的学习上,当然如果是想专门学Linux的,还是推荐在Cento ...
- 005——php字符串中的处理函数(四)
<?php /** * 字符串处理函数: * parse_url 解析URL.返回其组成部分 */ /* $url="http://www.lantianwang.com/admin/ ...
- 解决MySQL workbench的Can't connect to MySQL server on '127.0.0.1'(10061)问题
如题,今天打开MySQL时,出现了这种问题,无法连接到数据库 问题原因:The error (2003) Can't connect to MySQL server on 'server' (1006 ...
- selenium对应三大浏览器(谷歌、火狐、IE)驱动安装
selenium:v3.7.0 一.谷歌浏览器 chromdriver.exe 根据自己谷歌浏览器版本安装对应chromedriver的版本. 我电脑谷歌版本是65的,装的v2.36版,链接:http ...
- Beta阶段第2周/共2周 Scrum立会报告+燃尽图 12
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411] 版本控制:https://git.coding.net/liuyy08 ...
- 第10课 struct和union分析
struct的小秘密:空结构体占多大内存呢? 直观的答案有两种: 1.空结构体的大小为0 2.结构体本来就是为了将不同的变量集合在一起使用的,定义空结构体会导致编译错误 实例分析: #include ...
- Julia 语言的一些尝试
前些天发现了Julia 这门编程语言后便决定对其进行一些尝试,便写了下面的小程序,也算是看看这门语言所谓的速度快到底是怎么快法. 整数累加: x= function fff() : global x ...