1、加载dll-添加引用;添加引用的意思是让程序生成时根据配置的路径去加载相应的dll。
引用的步骤:
1)、点击引用。
2)、添加引用浏览。
3)、选择dll所在的路径确定。
其它方法:
导入命名空间、实例化对象、调用函数只有导入该dll的命名空间,才能使用该空间下的类。因此,在引用了dll之后的第一步是导入命名空间;第二步才是实例化该类对象;最后才是使用类对象来调用其成员函数。
下面所示的代码是调用封装好的DMC3000.dll中的初始化函数。
using System
using System.Collections.Generic
using System.ComponentModel
using System.Data
using System.Drawing
using System.Linq
using System.Text
using System.Threading.Tasks
using System.Windows.Forms
using nsLTDMC
(1)引入命名空间
using nsDMC3000
namespace DalsaConfig
{
public partial class Form1 : Form
{
(2)声明类对象
DMC3000 m_f1DMC3000
public Form1()
{
(3)实例化类对象
m_f1DMC3000 = new DMC3000()
InitializeComponent()
(4)调用dll中的函数
bool bIniResult = m_f1DMC3000.Init()
if (true == bIniResult)
{
MessageBox.Show("Init OK")
}
else
{
MessageBox.Show("Init Failed!")
}
}
}
}
扩展资料:函数名: system
功 能: 发出一个DOS命令
用 法: int system(char *command)
程序例:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf("About to spawn and run a DOS command\n")
system("dir")
return 0
}
又如:system("pause")可以实现冻结屏幕,便于观察程序的执行结果;system("CLS")可以实现清屏 *** 作。而调用color函数可以改变控制台的前景色和背景,具体参数在下面说明。
例如,用 system("color 0A")其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:
0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色。
(注意:Microsoft Visual C++6.0 支持system)
颜色属性由两个十六进制数字指定 -- 第一个对应于背景,第二个对应于前景。每个数字可以为以下任何值:
0 = 黑色 8 = 灰色;1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色;3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色;5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色;7 = 白色 F = 亮白色
参考资料:
百度百科——system(函数)
使用C#生成dll文件并调用一、创建dll文件:
例如生成一个md5编码判断状态的文件,即,输入一个字符串(string A)和一个32位md5编码(string B),判断此字符串A对应的32位md5编码是否与B相等,如果相等返回true,否则返回false。
打开VS 2005,“文件”--》“新建”--“项目”,选择“Windows 控件库”,命名后点击“确定”,在“UserControl1.cs”中输入以下代码:
using System
using System.Collections.Generic
using System.ComponentModel
using System.Drawing
using System.Data
using System.Windows.Forms
using System.Text
using System.Security.Cryptography
namespace md5
{
public partial class Program : UserControl
{
#region MD5 32位加密:GetMd5Str32
/// <summary>
/// 32位MD5加密
/// </summary>
/// <param name="strSource">待加密字串</param>
/// <returns>加密后的字串</returns>
public static string GetMd5Str32(string strSource)
{
byte[] bytes = Encoding.ASCII.GetBytes(strSource)
byte[] hashValue = ((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes)
StringBuilder sb = new StringBuilder()
for (int i = 0i <16i++)
{
sb.Append(hashValue[i].ToString("x2"))
}
return sb.ToString().ToUpper()
}
#endregion
#region 核对md5编码是否一致:CheckMd5String()
/// <summary>
/// 核对md5编码是否一致
/// </summary>
/// <param name="ConvertString"></param>
/// <returns>如果一致返回true,否则返回false</returns>
///
public static bool CheckMd5String(string str1, string str2)
{
string md5String = str1//需要验证的字符串
string md5DbString = str2//需要核对的32位md5编码
int result = string.Compare(md5.Program.GetMd5Str32(str1), md5DbString, true)
if (result == 0)
{
return true
}
else
{
return false
}
}
#endregion
}
}
修改“UserControl1.Designer.cs”中的命名空间为“md5”,方法为“Program”,即可生成dll文件。
在...\bin\Debug文件假下,可以找到相应的dll文件。
二、部署dll流程:
首先把dll文件放到应用程序...\bin\Debug\下;
然后在解决方案中添加引用:右键鼠标-->添加引用-->浏览-->选择dll放置路径后点击“确定”。
注意:要在应用文件头处使用using md5;命令。
测试应用程序代码,如下:Form1.cs
using System
using System.Collections.Generic
using System.ComponentModel
using System.Data
using System.Drawing
using System.Text
using System.Windows.Forms
using md5
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent()
}
private void button1_Click(object sender, EventArgs e)
{
string str1 = textBox1.Text.ToString()
string md5String = textBox2.Text.ToString()
textBox3.Text = md5.Program.GetMd5Str32(str1)
textBox4.Text = md5.Program.CheckMd5String(str1, md5String).ToString()
}
private void button2_Click(object sender, EventArgs e)
{
this.Close()
}
}
}
三、注意点:
1、在C#应用程序开发过程中,加载dll文件时,报错“未能加载文件或程序集“md5, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。”,请指点一下是什么原因?
解决:这是因为加载dll的路径问题,正确加载方式为:在“解决方案”的“引用”文件上右击鼠标,选择“添加引用”---》在“浏览”选项卡中添加引用(注意:自己定义的dll文件不能在“.NET”选项卡中添加。)
------------------------------------------------------------------------------------------------------------------
c#生成DLL文件,内部函数的问题
用C#编写一组处理XML文档的代码,由于要求生成DLL文件,并由外部的其他工具访问动态库中的文件,
但是用Dependency Walker检测我生成的这个DLL文件没有显示任何的函数,以前没做过这方面的东西,求教了
代码如下:
using System
using System.IO
using System.Xml
public class Sample
{
public static void Main()
{
DeleteArg()
}
static void DeleteArg()
{
XmlDocument doc = new XmlDocument()
doc.Load(@"c:\\data1.xml")
XmlNode root = doc.DocumentElement
XmlNode Node1
XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes
foreach (XmlNode xn in nodeList)
{
XmlElement xe = (XmlElement)xn
if (xe.GetAttribute("Name") == "SysModuleID")
{
xe.RemoveAll()
//xe.RemoveAttribute("Name")//删除Name属性
}
}
doc.Save("c:\\data1.xml")//保存这个文档到文件中
}
}
以上代码实现删除XML文件中某一节点的功能,如何在生成DLL后能够使用检测工具检测出DeleteArg函数,
使用Dependency Walker没检测出该函数是不是以为着这个动态库文件不能被调用.
----
因为.net的程序不是这样把函数放在导出表的, 我记得.net做的dll只导出了一个_CorDllMain的方法,
所以用Dependency Walker是看不出来的. 如果你想看.net做的dll导出了什么内容,可以用反射查看元数据
----
生成这个DLL库文件,是想要别的工具运行这个动态库文件,实现DELETEARG()这个函数的功能
----
可以的
----
你上面的代码不是生成DLL的,而是一个控制台应用程序.
要想创建动态库(DLL),在新建项目窗口中选择"类库", 默认的代码是这样的:
using System
using System.Collections.Generic
using System.Text
namespace ClassLibrary2
{
public class Class1
{
}
}
// 然后添加你的代码.最后代码如下:
using System
using System.Collections.Generic
using System.Text
using System.Xml
namespace ClassLibrary2
{
public class Class1
{
public void DeleteArg()
{
XmlDocument doc = new XmlDocument()
doc.Load(@"c:\\data1.xml")
XmlNode root = doc.DocumentElement
XmlNode Node1
XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes
foreach (XmlNode xn in nodeList)
{
XmlElement xe = (XmlElement)xn
if (xe.GetAttribute("Name") == "SysModuleID")
{
xe.RemoveAll()
//xe.RemoveAttribute("Name")//删除Name属性
}
}
doc.Save("c:\\data1.xml")//保存这个文档到文件中
}
}
}
最后编译一下就可以,
在Debug文件夹下回产生一个dll文件,最后在需要的工程里,将这个dll文件引进进去就可以用.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)