重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用C#生成dll文件并调用
新平ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
一、创建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 = 0; i 16; i++)
{
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文件引进进去就可以用.
MSN Space PowerToy新功能完全图解教程
Q] HTML模块实现功能
HTML模块允许用户使用一个自定义模块,在该模块之内用户可以随意使用HTML来排版, 个性化等,例如弄一个专门的每周绘画作品展示等等...
[/img]
[Q] 如何添加HTML模块
使用该模块的前提是IE6或更高版本, 该模块不支持中文版本. 所有选项包括提示只显示英文.
[Steps]
1. 登陆您的MSN Spaces, 点击自定义[Customize]
2. 在浏览器地址栏[Address bar]的URL后面添加参数 powertoy=sandbox 按Enter或者点击转到[Go]
[/img]
3. 点击自定义[Customize]-模块[Modules]
4. 在下拉列表中找到PowerToy: Custom HTML项, 选择添加[Add]
[/img]
5. 选择保存[Save]按钮
[/img]
[/img]
[Q] 如何使用该模块
该模块共有三大部分
1. HTML文本框 [非RTE] 在这里输入你喜欢的HTML代码 为了不扼杀你的创意 你喜欢输什么就输什么
2. 模块标题 [Module Name TextBox]
3. 是否显示边框复选框[Show Border CheckBox] 不显示边框一般是为Plain Black/Red/Blue/Green服务的
4. 保存[Save]按钮 回复[Revert]按钮-回到上次保存状态 不作保存
[/img]
[Q] 使用该模块还有什么其他问题?
1. 该模块无RTE, 完全符合喜欢HTML编辑的用户 [/img]
2. 该模块只支持512个字符, 因此不能输入大量的HTML代码, 使用部分受限.
3. 该模块同样会过滤大量HTML标签
4. 用户应当自行权衡是否使用边框 视觉效果等应自行解决
5. 我放进去一个图片或者别的东西竟然右边出去了!!! Answer: 大哥大姐, 本来让你自定义, 如果不怕难看就让他出去吧 自定义嘛 那就尽量不要让他出去喽
界面设计模块完全图解教程
[Q] 界面设计模块实现功能
界面设计模块允许用户使用一个自定义模块,在该模块之内用户可以随意调整整个Spaces的文字颜色 背景色等等一系列属性 个性十足 今天你Spaces了吗 这才是真正的自定义!
[Q] 如何添加界面设计模块
使用该模块的前提是IE6或更高版本, 该模块不支持中文版本. 所有选项包括提示只显示英文.
[Steps]
1. 登陆您的MSN Spaces, 点击自定义[Customize]
2. 在浏览器地址栏[Address bar]的URL后面添加参数 powertoy=tweakomatic 按Enter或点击转到[Go]
[/img]
3. 点击自定义[Customize]-模块[Modules]
4. 在下拉列表中找到PowerToy: Tweak UI项, 选择添加[Add]
[/img]
5. 选择保存[Save]按钮
[Q] 如何使用该模块
该模块共有5大部分
1. 背景色[Background Color] 包括内部[Inner] 和 外部[Outer]
A. 内部[Inner] Spaces内部各模块空隙处的背景颜色 3个两位十六进制正整数 00-FF 如:00CCFF
B. 外部[Outer] Spaces右边空白处的背景颜色[大背景色] 3个两位十六进制正整数 00-FF 如:00CCFF
[/img]
2. 背景图片[Background Image] 包括位置[Position] , 重复[Repeat] 和显示[Display] 依据各个主题[Theme]的不同 有些是有背景而有些是没有背景图片的 对于有背景图片的 我们可以:
A. 位置[Position] Spaces背景图片的位置, 依次为默认[Default], 左上[Top Left], 中上[Top Center], 右上[Top Right], 左中[Center Left], 中中[Center Center], 右中[Center Right], 左下[Bottom Left], 中下[Bottom Center], 右下[Bottom Right] 这个不需要细讲了吧 崩溃了
B. 重复[Repeat] Spaces背景图片重复的方式 不明白? 就是Windows桌面墙纸不是经常有中央,平铺以及拉伸什么的嘛, 就是差不多那个意思. 这里依次有默认[Default], 重复[Repeat], 不重复[No Repeat], 纵[Y]向重复[Repeat-Y], 横[X]向重复[Repeat-X]. 如果你背景是大图片, 就不要重复了, 小图片重阿重的才有效果 总体来说 可能我翻译不恰当 重复你就当成平铺好了 这样更好理解
C. 显示[Display] 是否显示背景图片 默认[Default]是显示的, 隐藏[Hide]则不显示
3. 文字颜色[Font Color] 包括链接/链接图标[Links/Bullets] 和 文字[Text]
A. 链接/链接图标[Links/Bullets] 所有超链接以及链接符号的颜色 3个两位十六进制正整数 00-FF 如:00CCFF
B. 文字[Text] 所有非链接普通文本的颜色 3个两位十六进制正整数 00-FF 如:00CCFF
4. 模块背景[Module Background] 包括颜色[Color] 和 透明度[Transparent]
A. 颜色[Color] 各个模块的背景颜色 3个两位十六进制正整数 00-FF 如:00CCFF
B. 透明度[Transparent] 各个模块背景的透明度设置 20-100的整数值 分别为 20%-100%不透明 使用这个对整体视觉冲击比较大
5. 模块边框[Module Borders] 包括宽度[Width], 风格[Style] 和 颜色[Color]
A. 宽度[Width] 各个模块边框的宽度 0-9 建议值为0或1 2以上就不要弄拉 大哥大姐 弄那么粗的边框真的很难看啊 不信弄个9试试? 嘿 还试试就试试? 郁闷
B. 风格[Style] 各个模块边框的风格设置 用过.Net开发Web或者网页经常用的就知道有什么区别 当然 大家多试几次都能看出来 依次有默认[Default]-默认, 无[None]-不显示边框, [Dotted]-小点点, [Dashed]-小虚线, [Solid]-实线, [Double]-实线, [Groove]-凹按钮, [Ridge]凸按钮, [Inset], [Win-inset], [Outset]-没啥大的区别? 主要是用在这里不吼/span
1、新建DLLTest文件夹,在该文件夹中新建source文件夹。
2、在source文件夹中造add.c。
3、win+R+cmd请出总指挥“命令行”,输入。
4、继续输入(路径也要随机应变)link /DLL /out:E:\VCfile\DLLTest\source\add.dll E:\VCfile\DLLTest\source\add.obj。
5、新建源文件call_dll.c或.cpp放到DLLTest文件夹,同时add.dll也复制过来。
6、编译,连接运行出现个5。调用成功。
注意事项:
C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。