VC mfc 基于对话框的工程。
生成 release 版本后,本机和有VC的机器上正常,但在非VC环境下,点了就没反应,也没提示缺什么DLL之类的。
我加了几个提示框来调试,在 主对话框 的构造函数开始处加了
CAVS1Dlg::CAVS1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CAVS1Dlg::IDD, pParent)
{
MessageBox("dlg in");
在截止处加了 MessageBox("dlg out");
}在Init处加了BOOL CAVS1Dlg::OnInitDialog()
{
MessageBox("initdlg in");
CDialog::OnInitDialog();结果 ‘dlg in’ 和 ‘dlg out’ 都显示了,但 ‘initdlg in’就没显示。我用了 静态链接DLL 编译的,而且是 /MT 模式。我的主窗口上有 两个 WinSock 控件,程序里有个自己定义的 ADO 连数据库的类 CADOConn,#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename ("BOF","adoBOF")#include <comutil.h>#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class CADOConn  
{
public:
void ExitConnect();
BOOL ExecuteSQL(_bstr_t strConnect,_bstr_t bstrSQL);
_RecordsetPtr& GetRecordSet(_bstr_t strConnect,_bstr_t bstrSQL);
void OnInitADOConn(_bstr_t strConnect);
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
CADOConn();
virtual ~CADOConn();};连的是 ORACLE。另:在有VC的机器上 第一次 运行软件时,窗口不是在屏幕中间,而是在左上角,第二次之后就在中间了。
还有,我用 VC6.0 和 VC 2003 都试过了,都不行。有没有有经验的知道怎么回事啊?

解决方案 »

  1.   

    应该是程序出问题了,在Release下没有报错,
    你试着加上try看看.
      

  2.   

    编译器主要是看有没有语法错误
    BOOL CAVS1Dlg::OnInitDialog()
    没反应????
    看看消息映射有什么冲突的吗?
      

  3.   

    好像是 WINSOCK 的事,
    我建了一个新工程,选了 sock ,编译出来的能在别人的机器上运行,
    但我在界面上 加个WINSOCK 控件,用Class WiZard定义了一个 CMSWinsockControl 变量,然后再编译的程序,在别人的机器上就没反应了。
      

  4.   

    有没有人知道WINSOCK 怎么解决啊?
      

  5.   

    WINSOCK控件可以在VC6下用? 不懂
      

  6.   

    在构造函数中加MessageBox会不会阻断消息循环?这个没试过....
    在构造函数和OnInitDialog中有没有干什么别的事情?至于“在有VC的机器上 第一次 运行软件时,窗口不是在屏幕中间,而是在左上角,第二次之后就在中间了。”,这个比较好解决,在OnInitDialog函数中按如下即可,估计是分辨率问题:RECT rect;
    //获得屏幕尺寸
    scrWidth=GetSystemMetrics(SM_CXSCREEN);
    scrHeight=GetSystemMetrics(SM_CYSCREEN);
    //获取窗体尺寸
    GetWindowRect(this->m_hWnd,&rect);
    rect.left=(scrWidth-rect.right)/2;
    rect.top=(scrHeight-rect.bottom)/2;
    //设置窗体位置
    SetWindowPos(this->m_hWnd,this->m_hWnd_TOP,rect.left,rect.top,rect.right,rect.bottom,SWP_SHOWWINDOW);
      

  7.   

    谢谢7楼的回复。我在构造函数中确实加了点东西,是Xtreme ToolkitPro的主题风格。CAVS1Dlg::CAVS1Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CAVS1Dlg::IDD, pParent)
    {
    MessageBox("dlg in");
    //{{AFX_DATA_INIT(CAVS1Dlg)
    m_str_dfjy = _T("");
    m_str_sddy = _T("");
    m_str_ydlb = _T("");
    m_str_yddz = _T("");
    m_str_yhh = _T("");
    m_str_yhxm = _T("");
    m_str_zjh = _T("");
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); TCHAR szStylesPath[_MAX_PATH]; VERIFY(::GetModuleFileName(
    AfxGetApp()->m_hInstance, szStylesPath, _MAX_PATH));

    m_strStylesPath = szStylesPath;
    int nIndex  = m_strStylesPath.ReverseFind(_T('\\'));
    if (nIndex > 0) {
    m_strStylesPath = m_strStylesPath.Left(nIndex);
    }
    else {
    m_strStylesPath.Empty();
    }
    m_strStylesPath += _T("\\Styles\\");
    //XTPSkinManager()->AddColorFilter(new CXTPSkinManagerColorFilterColorize(50, 100, 1)); XTPSkinManager()->SetApplyOptions(XTPSkinManager()->GetApplyOptions() | xtpSkinApplyMetrics);
    XTPSkinManager()->LoadSkin(m_strStylesPath + _T("Office2007.cjstyles"), _T("NormalBlue.ini")); MessageBox("dlg out");
    }所以‘dlg in’是普通风格,‘dlg out’是Office2007风格。InitDialog应该没问题吧,因为他根本就没进去。
    就像我3楼说的,我新建了一个干净的工程,加了WINSOCK 控件和 CMSWinsockControl 变量之后,就不能在非VC的机器上打开了,何解啊?
      

  8.   

    解决了,是WinSock没注册。结贴散分了。我头一次发帖,不知道我有多少分,就弄了默认的20分,有点少哈,是那么个意思,大家将就将就。