当前位置: 首页 > news >正文

烟台网站建设策划方案深圳网络推广服务公司

烟台网站建设策划方案,深圳网络推广服务公司,二次元wordpress主题,企业门户网站建设机构在实际软件开发过程中#xff0c;由于公司使用了多种语言开发#xff0c;在C#中可能需要实现某个功能#xff0c;而该功能可能用其他语言已经实现了#xff0c;那么我们可以调用其他语言写好的模块吗#xff1f;还有就是#xff0c;由于C#开发好的项目#xff0c;我们可…在实际软件开发过程中由于公司使用了多种语言开发在C#中可能需要实现某个功能而该功能可能用其他语言已经实现了那么我们可以调用其他语言写好的模块吗还有就是由于C#开发好的项目我们可以利用reflector等反编译工具反编译出其源代码所以对于一些核心算法我们不希望被别人知道因此为了增强代码的安全性我们需要将一些核心算法用C或C来编写然后用C#来调用这些已经写好的接口。在面对以上情况时我们该怎么做呢 方案一重新实现         针对第一种情况我们可以将C或者C功能用C#来重新实现这样的话代码比较统一维护比较方便但是这样的话增加了软件开发的成本把C的代码功能改成C#涉及到指针和内存的操作比较繁琐况且有开发好的模块为什么不重复利用呢针对第二种情况就不能得到有效解决虽然可以使用混淆器对代码进行混淆但是任然不是很安全。 方案二封装COM组件         我们可以将C或者C的函数封装成COM组件在C#中调用时比较方便但是COM组件需要注册而且多次注册可能也会导致一些问题同时在处理C或者C的类型与COM组件的类型转换的时候也可能有些麻烦。 方案三使用动态链接库         我们可以直接调用C或者C已经写好的动态链接库这样比较方便这样很好的解决了上述问题。 在实际项目中我们需要使用C#调用C的一些接口因此我使用的是方案三采用动态库下面我就在实际中怎么处理的进行说明。         在调用动态库的过程中我也遇到了以下一些问题         1、C中有指针C#中需要使用指针吗         由于C中的动态库中有指针参数因此我也是用.NET的不安全代码使用了C#的指针但是最后也还是出现了一些问题如在C#中传入的参数是一个二维数组时就出现了问题这个问题我在网上找了好多资料也没有解决最后和c程序员商量了下改变了传入参数的参数类型。最后也没有使用指针。         2、C#和C中的类型如何转换呢         虽然C#和C比较类似但是其给我们的参数类型我们要与C#的参数类型一一对应起来因此我找了一些资料把其类型一一对应了具体看后续说明。         3、C写好的动态库放到那个位置呢         关于C动态库的位置也是个问题在应用中我们使用了相对路径和绝对路径进行测试有的发现在VS中可以调用到但是发布后发现无法调用到动态库最后只要把动态的dll放到系统的目录system32下面才解决了改问题目前还没找到其他的方法如有其他的更好方法还请大家指点。         4、如何反编译C的dll的名称端口         可以通过Dependency Walker工具进行反编译查看别人写的动态库的信息         5、还有其他的一些细节如C#调用动态库需要指定其编码、代码写法等等 c#调用c动态库一般我们这样写 [DllImport(UCamer.dll, CallingConvention CallingConvention.Winapi)] public extern static void Disp_Destroy(IntPtr hShow); DllImport的第一个参数UCamer.dll是动态库dll的路径此dll放在程序运行的根目录或者c:windows/sytem32下 CallingConvention 参数是c#调用c的方式 是个枚举 msdn解释如下 Cdecl调用方清理堆栈。这使您能够调用具有 varargs 的函数如 Printf使之可用于接受可变数目的参数的方法。 FastCall不支持此调用约定。StdCall被调用方清理堆栈。这是使用平台 invoke 调用非托管函数的默认约定。 ThisCall第一个参数是 this 指针它存储在寄存器 ECX 中。其他参数被推送到堆栈上。此调用约定用于对从非托管 DLL 导出的类调用方法。 Winapi此成员实际上不是调用约定而是使用了默认平台调用约定。例如在 Windows 上默认为 StdCall在 Windows CE.NET 上默认为 Cdecl。 从上面来看Winapi方式是根据系统自动选择调用规约的。 而thisCall是对c类的调用方法。 所以 一般情况下我们选择Winapi就可以了。 例子 #region 无标题窗体右键任务栏弹出菜单代码[DllImport(user32.dll, EntryPoint GetWindowLong, CharSet CharSet.Auto)]public static extern int GetWindowLong(HandleRef hWnd, int nIndex);[DllImport(user32.dll, EntryPoint SetWindowLong, CharSet CharSet.Auto)]public static extern IntPtr SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);protected override CreateParams CreateParams{get{const int WS_MINIMIZEBOX 0x00020000; // Winuser.h中定义 CreateParams cp base.CreateParams;cp.Style cp.Style | WS_MINIMIZEBOX; // 允许最小化操作 return cp;}}#endregion#region 窗体拖动代码[DllImport(user32.dll)]public static extern bool ReleaseCapture();[DllImport(user32.dll)]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);public const int WM_SYSCOMMAND 0x0112;public const int SC_MOVE 0xF010;public const int HTCAPTION 0x0002;private void Login_MouseDown(object sender, MouseEventArgs e){ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE HTCAPTION, 0);}#endregion[DllImport(wininet.dll)]private extern static bool InternetGetConnectedState(out int conn, int val);private void btnNetTest_Click(object sender, EventArgs e){int Out;if (InternetGetConnectedState(out Out, 0) true){MessageDxUtil.ShowTips(Internet网络连通!);}else{MessageDxUtil.ShowTips(Internet网络不通!);}}
http://www.yutouwan.com/news/498436/

相关文章:

  • 分销商城网站建设网页设计和网站建设
  • 四川建设厅报名网站基于网站开发app
  • 做网站在阿里云买什么做网站需求报告
  • 网页制作与网站建设完全学习手册做理财网站
  • 科技团队网站湖北省两学一做网站
  • 华为云网站定制wordpress 调用副标题
  • 首都医科大学网站建设公司网络运维
  • 嘉兴网站关键词php做网站用什么开发工具
  • 威海网站制作团队广西南宁网站排名优化
  • 云服务器是否可以做多个网站石家庄网站建设时光
  • 免费h5模板网站专业的家居网站建设
  • asp.net做网站Dreamver如何做镜像别人网站
  • 阿里云无主体新增网站mm 263企业邮箱登录
  • 河北智能网站建设php毕业设计代做网站
  • 建设购物网站费用新项目首码对接平台
  • 手机能建设网站忙网站建设咨询公司
  • 怎么在年报网站做简易注销用自己的服务器建网站
  • 保定网站推广门户网站部署方案
  • 自己服务器做网站主机网站被入侵后需做的检测 1
  • wordpress情侣网站源码成品网站w灬源码伊园
  • 网站栏目 英文北京网站备案核验单
  • wap门户网站个人手机网站
  • 网站开发项目发展现状渗透wordpress
  • 苏州知名高端网站建设机构优化公司流程
  • 深圳私人做网站上海公司网站建设哪家好
  • 上海网站运营wordpress代码
  • asp大型网站开发传奇网站模板免费下载
  • 公司网站招聘费如何做会计分录抖音开放平台是干嘛的
  • 浙江网站建设价格帮企业做网站赚钱
  • 网站建设捌金手指花总十三汕头网站建设方案外包