用VS2005编译了一个C++的DLL,有点问题,请各位大哥帮帮我,谢谢。。。。。。。。。。。。。。。。。。。。。。。。。

jicey 2007-12-11 12:29:31
我用VS2005编译了一个C++的DLL,类型是“带静态链接MFC的规则DLL”,现在想看看外部传进来的字符串参数是否正确,该用什么语句呢?
DLL中的导出函数:
extern "C" __declspec( dllexport ) void Dcm2Bmp(char *pFileName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

AfxMessageBox(pFileName);

CDcmBmp m_DcmBmp;
strcpy(m_DcmBmp.m_strFileName, buf);
m_DcmBmp.ConvertDicomToBMP();
}
如上所示,我试着用AfxMessageBox(pFileName);查看传进来的字符串是否正确,但项目调用时,根本弹不出显示pFileName所指字符串的对话框,编译可以通过,但运行时出一个错误提示,还没看清,程序就自动终止了,就啥也没有了,怎么回事呢?但在另一个地方有段代码:
fp = fopen(pszFileName, "rb");
if (!fp)
{
AfxMessageBox(_T("Failed to open file for read."));
return;
}
这段代码就可以输出字符串"Failed to open file for read.",也正是因为老是打不开文件,所以我想看看传进来的路径字符串到底是什么(因为我怀疑传进来的字符串不对),因为若把上面的程序改成:
fp = fopen(“"\\My Documents\\ct1.dcm"”, "rb");
if (!fp)
{
AfxMessageBox(_T("Failed to open file for read."));
return;
}
就可以打开文件,一切都顺利,但就是从外部传进来相同的路径字符串,就是打不开,老跳出对话框“Failed to open file for read.”,所以我想看看传进来的路径字符串到底变成了什么,用开头我说的那个AfxMessageBox(pFileName);不行?那我要怎么办呢?望大家不吝赐教,谢谢啦!!!!!
...全文
258 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangjian0000 2007-12-26
  • 打赏
  • 举报
回复

extern "C" __declspec( dllexport ) void Dcm2Bmp(char *pFileName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CString szStr;
szStr = pFileName;
AfxMessageBox(szStr);

CDcmBmp m_DcmBmp;
strcpy(m_DcmBmp.m_strFileName, buf);
m_DcmBmp.ConvertDicomToBMP();
}
guangjian0000 2007-12-26
  • 打赏
  • 举报
回复

extern "C" __declspec( dllexport ) void Dcm2Bmp(char *pFileName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CString szStr;
szStr = pFileName;
AfxMessageBox(szStr);


CDcmBmp m_DcmBmp;
strcpy(m_DcmBmp.m_strFileName, buf);
m_DcmBmp.ConvertDicomToBMP();
}
coffeaddice 2007-12-26
  • 打赏
  • 举报
回复
在你DLL那个工程里 
Project->setting->Debug中

Executable for debug session:

右边的箭头,把工程连接到C#那个工程中调用的那个DLL

调试就ok了
jicey 2007-12-26
  • 打赏
  • 举报
回复
不行呀,呜呜
阿呆_ 2007-12-24
  • 打赏
  • 举报
回复
将dll项目设为启动项目再运行
jicey 2007-12-24
  • 打赏
  • 举报
回复
救命呀..........
jicey 2007-12-17
  • 打赏
  • 举报
回复
还有哪位大哥有工程和DLL联调的经验吗?可否给小弟点指点?
jicey 2007-12-17
  • 打赏
  • 举报
回复
我按楼上大哥的说法试了 ,但并没有出现您说的提示我选哪个程序运行呀,唉,怎么回事呢?
jxxy1234 2007-12-14
  • 打赏
  • 举报
回复
这样吧:
把调用这个dll的可执行程序放在你的dll的debug目录内。
然后直接打开dll工程,设断点,debug编译,运行。
这个时候会提示你选哪个程序运行,然后你选那个可执行程序。

应该可以调试了。

如果还不行,你还是找身边的人看看吧。
jicey 2007-12-14
  • 打赏
  • 举报
回复
我全盘搜索了,没有和我的dll重名的呀。
把pFileName这个路径字符串写到文件里?要怎么写呢?不好意思我是个菜鸟,汗~~~~
我帖子开头就是想把这个路径字符串的内容用对话框显示出来,但不知怎么老是不行,他们提示我设断点调试我才考虑设断点的,唉,断点也调不成,快疯了
jxxy1234 2007-12-14
  • 打赏
  • 举报
回复
我的意思是,比如这个dll叫a.dll,是不是还有其它叫a.dll的文件?

还有其它更笨的调试方法,比如直接把这个pFileName的内容写入到一个文件里,然后看文件内容是否正确。
调试的方法有很多,你可以自己想。没必要非要在IDE里面直接看。
jicey 2007-12-14
  • 打赏
  • 举报
回复
还是不行呀,C#里就调用了这一个DLL呀,真奇怪了,唉。还有大哥能给点提示吗?快疯了。。。。
jxxy1234 2007-12-13
  • 打赏
  • 举报
回复
不应该呀。
全盘搜索一下这个dll,把除当前工程编译出来的dll以外的其它dll副本都删掉。
会不会你的c sharp程序调用了另外一个dll呀。
jicey 2007-12-13
  • 打赏
  • 举报
回复
我按楼上的大哥的方法试了,把两个工程放在了同一解决方案里,并使我的C#项目依赖于我的dll工程,但设置断点还是跟踪不到dll里面呀,唉,愁死了,哪位大哥还有好方法吗?帮帮小弟吧。。。。
oakfire 2007-12-12
  • 打赏
  • 举报
回复
DLL你不是有源代码么,那就能调试啊
smaltdd 2007-12-12
  • 打赏
  • 举报
回复
最不喜欢工程和DLL的联调

让人很郁闷
PcrazyC 2007-12-12
  • 打赏
  • 举报
回复
你自己用C++先写个程序,测试一下是不是这个DLL的问题

如果不是的话,那就应该是C#代码的问题了
jicey 2007-12-12
  • 打赏
  • 举报
回复
我是在我的C#项目里调用这个C++DLL,只是把做好的DLL文件放到项目的同一目录下,要设断点只能在DLL里面设,DLL是封装的根本看不到代码,没法设呀。再说监视变量难道能跟踪到DLL中去?困惑,我是新手,请各位大侠指教!!
jxxy1234 2007-12-12
  • 打赏
  • 举报
回复
把c sharp和dll两个工程放在一个解决方案里面就可以调试了。
更进一步,你可以在依赖关系中,加入c sharp工程依赖dll工程。

好像不用添加引用吧。我调试想来都是放在一个工程里面调。
jicey 2007-12-12
  • 打赏
  • 举报
回复
谢谢各位大哥的热心解答!
C#的代码应该没有问题的,就是DLL的问题,我有DLL的代码,但不会在项目中调试。
今天有个网友告诉我一个方法:先把DLL项目(名字叫wwstest2)添加到解决方案里,然后右击“引用”选择“添加引用”,然后选择“项目”下面的我的DLL项目,确定就可以了,这时“引用”下面就多了我那个dll,然后就可以在我的C#的引用处和DLL里面分别设置断点进行调试了。但我选择“项目”下面的我的DLL项目,点确定之后,就提示对话框:未能添加对“wwstest2”的引用。
怎么回事呢?大家能帮帮小弟吗?感激不尽呀!!!!!
加载更多回复(2)

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧