静态库引用问题

diclover 2009-06-17 09:28:19
我自己用VC6.0编写了一个基于MFC的静态库,需要在没有MFC的开发环境下调用,因此采用了User MFC in a Static Library的方式编译,编译后使用无MFC环境的开发工具来调用发现:在release环境下可以正常运行,但在debug模式下却无法正常运行,这样无法进行单步调试。后来使用VC6.0的MFC对话框应用程序中调用该静态库,用用程序同样采用User MFC in a Static Library的方式编译,在Release模式下可以运行,但是在debug调试模式下运行到
CDocument* CWinApp::OpenDocumentFile(LPCTSTR lpszFileName)
{
ASSERT(m_pDocManager != NULL);
return m_pDocManager->OpenDocumentFile(lpszFileName);
}
时报错,其中lpszFileName为空,pDocManager 为NULL。
然后我采用User MFC in a Share DLL的方式编译静态库,调用时选择User MFC in a Share DLL模式编译应用程序,运行正常。
最后我尝试将编写了一个动态库,同样按上面的方式调用,无论Debug模式还是Release模式都可以正常调用。
但我现在需要的是静态库,并且需要运行在Debug模式下,为什么会出现这样的情况?
...全文
196 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
diclover 2009-08-13
  • 打赏
  • 举报
回复
问题原因终于明白了,Debug版本调用的是debug版本的MFC库,Release版本调用的是release版本的MFC库。
wanyuzhen 2009-06-18
  • 打赏
  • 举报
回复
学习!!
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dream238 的回复:]
静态库也分DEBUG版本和RELEASE版本的
试试编出两个不同版本的静态库,然后再根据编译环境链接相应的版本库
这样试试看。
[/Quote]
同意
ArcRain 2009-06-17
  • 打赏
  • 举报
回复
静态库也分DEBUG版本和RELEASE版本的
试试编出两个不同版本的静态库,然后再根据编译环境链接相应的版本库
这样试试看。
bragi523 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 diclover 的回复:]
我又做了一个简单的静态库,发现还是不能在debug下使用,这个静态库仅有4个文件:
SDK.cpp文件如下:
#include "stdafx.h"
#include "SDK.h"

int WINAPI TestLib(int nTest)
{
nTest++;
return nTest;
}
SDK.h文件如下:
int WINAPI TestLib(int nTest);
stdafx.h文件如6楼
stdafx.cpp文件如下:
#include "stdafx.h"
调用如下:
void CTestLibDlg::OnButtonTest()
{
// TODO: Add yo…
[/Quote]
这样都不行的话可能是你的编辑器有问题了
diclover 2009-06-17
  • 打赏
  • 举报
回复
我又做了一个简单的静态库,发现还是不能在debug下使用,这个静态库仅有4个文件:
SDK.cpp文件如下:
#include "stdafx.h"
#include "SDK.h"

int WINAPI TestLib(int nTest)
{
nTest++;
return nTest;
}
SDK.h文件如下:
int WINAPI TestLib(int nTest);
stdafx.h文件如6楼
stdafx.cpp文件如下:
#include "stdafx.h"
调用如下:
void CTestLibDlg::OnButtonTest()
{
// TODO: Add your control notification handler code here
int nInput=2;
int nRet=TestLib(nInput);
CString strRet=_T("");
strRet.Format("Return:%d",nRet);
MessageBox(strRet);
}
diclover 2009-06-17
  • 打赏
  • 举报
回复
我补充一个问题:我在创建的是Win32 Static Library,这是我的StdAfx.h文件:
// or project specific include files that are used frequently, but
// are changed infrequently
//

#if !defined(AFX_STDAFX_H__E168FC92_2BF3_481D_9BDC_B43C23EE8A51__INCLUDED_)
#define AFX_STDAFX_H__E168FC92_2BF3_481D_9BDC_B43C23EE8A51__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers

#include <afx.h>
#include <afxwin.h>

// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__E168FC92_2BF3_481D_9BDC_B43C23EE8A51__INCLUDED_)
oyljerry 2009-06-17
  • 打赏
  • 举报
回复
调试时,所有的库以及调用的exe的MFC运行库等都保持一致...
bragi523 2009-06-17
  • 打赏
  • 举报
回复
你可以试着在stdafx.h中加一些afx.h之类的试下
bragi523 2009-06-17
  • 打赏
  • 举报
回复
大概是你的那个lib工程有一些MFC头文件没包含进来(建工程的时候的属性)
这样ASSERT等就用不了,rlease下又把它优化掉了,所以可以运行
fengrx 2009-06-17
  • 打赏
  • 举报
回复
没遇到过,帮顶。
1楼说的有可能。
Roy_ly 2009-06-17
  • 打赏
  • 举报
回复
这个问题也太奇怪了吧,关注

个人觉得你可以试试重新安装一下VC,可能是你的静态库出问题了,重新安装一下让它覆盖原来旧的DLL试试。
hly520 2009-06-17
  • 打赏
  • 举报
回复
路过~~~

15,473

社区成员

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

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