C#、C++混合编程(一)

阅读: 评论:0

C#、C++混合编程(一)

C#、C++混合编程(一)

参考链接: .html   最近需要进行一些混合编程实验,主要是界面使用C#设计实现,目前考虑使用WPF因为WP以及Win8开发,WPF都少不了顺便可以学习。 对于混合编程,需要注意一些细节。
  1. 要使用[DllImport("Win32ProjectDll.dll")]需要using System.Runtime.InteropServices; 
  2. 需要将NATIVE C++DLL放到对应的目录的Debug下

    但是这样每次改动DLL都会很复杂每次都需要修改路径,

    方法1:可以在[DllImport("Win32ProjectDll.dll")]里面修改完整路径,例如:

    [DllImport("D:\Win32ProjectDll.dll")]

    方法2:当然还有方法就是设置DLL的默认目录

    可以按如下设置dll项目,假设程序所在目录为C:

    1、属性-》调试-》命令设为主程序 C:

    1、属性-》调试-》工作目录设为主程序所在目录 C:abc

    2、将dll项目设置中链接器-》常规-》输出文件改为C:abcXXX.dll

    设置完后就可以直接使用调试命令了。

    来自 <.html>

  1. 要在DLL里面添加extern “C”作为申明前缀并记得更新dll放到对应debug目录下
  2. 貌似每次调用一个函数就需要添加[DllImport("Win32ProjectDll.dll")]否则会提示某函数没有实现
  3. 通常会碰到不能在DLL里面找到某函数的入口函数,通常这是由前面设置不对所造成如缺少extern “C”之类
  4. 如果DLL中函数拥有参数那么需要注意设置 [DllImport("Win32ProjectDll.dll", CallingConvention = CallingConvention.Cdecl)]

    注意其中的callingconvention.Cdecl,VS有提示各种调用方式适合的情况,不匹配有可能出现

           调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配

          的错误


转载于:.html

本文发布于:2024-01-31 15:53:49,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668763229661.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23