设置首页 收藏本站
积木网首页 - 学院 - 技术百科 - 问答 - 黄页 - 手册 - 站长工具 - 社区
    
群组 >> C#builder

C#builder

共有2088位成员   人气指数 -   最新排名 -

【话题】C# 调用非托管的Dll时,调试问题?

2009-10-08 17:08:07 来自:小荷才露尖尖角 浏览数:36
我用vs2008 建立一个 C++的普通动态链接库项目 GenDll ,生成dll文件。


然后在vs C#环境下建立一个winows窗口程序 项目 CallDll,

在这个项目里面引用了生成的dll文件里面的函数。


--------------------------------------------

我有个想法是:

把这两个项目放在一个解决方案里面一块联调,并且在两个

项目里面分别打上断点,在运行CallDll这个项目时,能进

入到GenDll项目里面的断点处。

----------------------------------------

这个想法可不可以实现,要怎么设置才可以?
 
tingting567回复于08日17点20分 
我用vs2008 建立一个 C++的普通动态链接库项目 GenDll ,生成dll文件。
====>
说明楼主用的c++不是托管cpp。

不是托管cpp写的dll,必须先进行用c#进行封装,在调试的时候,我觉得应该不能进入到cpp的项目中进行调试。
 
张静远回复于08日17点30分 


而且调试时,DLL项目里面设断点的地方提示: 当前不会命中断点,还没有为该文档加载任何符号。
 
陶品瑶回复于08日17点45分 
把两个项目都加入到解决方案当然可以设置断点进行调试。但是也可以不把DLL项目加入解决方案,也是可以调试DLL的,只要按F11进入单步调试就可以跟入DLL的代码。前提是你的DLL是在本机的DLL源码生成的。
 
chenych回复于08日17点54分 



我把两个项目添加到一个解决方案里面,分别打上断点,调试的时候,那个生成DLL项目里面的断点进不去,直

接跳过,是什么原因啊?
(我生成DLL的项目,是在本机上Vs下,直接引入别人写好的项目)
 
colorfulsnow回复于08日18点07分 


是的,我引用DLL时,在C#里面进行了声明
        [DllImport("STFDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

        static extern int APDUInterface([MarshalAs(UnmanagedType.LPArray, SizeConst = 20)]  byte[] inBuff, uint inLen,    [MarshalAs(UnmanagedType.LPArray, SizeConst = 1024)]  byte[] outBuf, out uint outLen);

 
yishu90回复于08日18点20分 
这样当然不行,你必须删掉原有项目的引用,加入同一个解决方案里的项目引用
 
玩玩而已回复于08日18点34分 
(我生成DLL的项目,是在本机上Vs下,直接引入别人写好的项目)

这样不可以调试。应该是调试主程序的时候才可以。

不过,你可以这样来试试:
在你的项目里使用如下两个语句
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
这样,程序运行到这里的时候就可以调试了。
C#builder的其他话题...

网址导航网站分类目录积木 TinyMCE 服务邮箱: Gimoohr(#)gmail.com
Copyright © 2008 Gimoo.Net  京ICP备05050695号