24小时热门版块排行榜    

查看: 7743  |  回复: 145
本帖产生 1 个 程序强帖 ,点击这里进行查看

magic7004

金虫 (职业作家)

引用回帖:
Originally posted by ytusz at 2010-10-09 09:19:14:
请问楼主经常出入那些网站学习各种语言编程啊?

不常出入网站,最近忙,我不是专业编程的。有时csdn灌灌水。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
61楼2010-10-12 13:19:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dgh338

新虫 (初入文坛)


小木虫(金币+0.5):给个红包,谢谢回帖交流
我自学过一段时间的vb,挺不错的软件,就是不精
62楼2010-10-19 15:44:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

swustxxl

金虫 (正式写手)

【求助】VS2005数值计算程序调试报错


小木虫(金币+0.5):给个红包,谢谢回帖交流
数据拟合程序,运用现成的动态链接库LBFGS法(带约束的),操作平台是VS2005,将其引入MFC单文档错误迭出——不是让楼主处理数值计算哈!!!!

我将算法程序编入了CLoginDlg.CPP中,点击button1,程序关闭对话框弹出单文档界面,后台同时完成运算。

void CLoginDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        _tmain();
        CDialog::OnOK();

}
以上是Cbutton的代码,编译首先报错的是_tmain()位置,说的是不接受0个参数,这个公共函数的原型为
int _tmain(int argc, _TCHAR* argv[])
{
     .........
     .........
     return 0;
}
我干脆直接对原函数做了改动,如下:
int _tmain()
{
     .........
     .........
     return 0;
}
在解决方案中又添加了lbfgsb.lib文件,于是编译、链接都可通过,甚至可以运行,但点击button1,程序就会报错,弹出如下对话框:





算法的最初程序是正确的,可编译可链接可运行,结果正确;我可以新建一个WIN32控制台应用程序重现算法程序的效果。证明算法程序本身无误,应该是动态链接库在加载到MFC程序时出现了错误。
希望有高手能指点一下~~不胜感激

以下是我的MFC程序关于引入算法动态链接库和执行运算的片段,最后附上了WIN32算法程序和我自己的MFC程序:

// LoginDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "xxl_try2.h"
#include "LoginDlg.h"

//#include "stdafx.h"
#include "iostream"
#include "memory.h"
#include "malloc.h"
#include "windows.h"
#include "math.h"

using namespace std;

// CLoginDlg 对话框

IMPLEMENT_DYNAMIC(CLoginDlg, CDialog)

CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CLoginDlg::IDD, pParent)
{

}

CLoginDlg::~CLoginDlg()
{
}

void CLoginDlgDataExchange(CDataExchange* pDX)
{
        CDialogDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
        ON_BN_CLICKED(IDC_BUTTON1, &CLoginDlg::OnBnClickedButton1)
END_MESSAGE_MAP()

// CLoginDlg 消息处理程序
// LBFGS.cpp : 定义控制台应用程序的入口点。
//计算梯度保存在g中,计算目标函数值保存在f中
//n是参数个数,x是参数向量
void fcn2(int n,double *x, double*t, double *y,double &f, double *g ){
        f=0;
        g[0]=0;
        g[1]=0;
        g[2]=0;
        g[3]=0;
        g[4]=0;
        g[5]=0;
        for(int k=0;k         {
                double tmp=y[k]-(x[0]*t[k]*exp(x[1]*t[k])+x[2]*t[k]*exp(x[3]*t[k])+x[4]*t[k]*exp(x[5]*t[k]));
                f+=tmp*tmp;
                g[0]+=-2*tmp*t[k]*exp(x[1]*t[k]);
                g[1]+=-2*tmp*t[k]*x[0]*exp(x[1]*t[k])*t[k];
                g[2]+=-2*tmp*t[k]*exp(x[3]*t[k]);
                g[3]+=-2*tmp*t[k]*x[2]*exp(x[3]*t[k])*t[k];
                g[4]+=-2*tmp*t[k]*exp(x[5]*t[k]);
                g[5]+=-2*tmp*t[k]*x[4]*exp(x[5]*t[k])*t[k];
        }

        return;
}

extern "C" void __declspec(dllimport)  __stdcall lbfgsb(int n,int m,double *x, double *l, double *u, int *nbd, double f, double *g, double factr, double pgtol, double *wa, int *iwa,char *task, int iprint,char *csave,bool *lsave,int *isave, double *dsave);

int main()//int argc, _TCHAR* argv[])
{
        const char dllPath[] = "lbfgsb.dll";

        //加载动态库文件
        HINSTANCE hLibrary = LoadLibraryA(dllPath);
        if(hLibrary == NULL){
                int error =GetLastError ();
                cout<<"Error of LoadLibrary = "<
                cout<<"Can't find the dll file."<                 FreeLibrary(hLibrary);
                return -1;
        }

        /* (如果获得这个程序的句柄)获得正在运行程序的路径和文件名*/
        bool exePathOut=true;

        if(exePathOut){
                char exePath[1000] = "\0";
                GetModuleFileNameA(hLibrary,exePath,sizeof(exePath));
                cout<         }

        bool *lsave;
        char *task,*csave,*str;
        int n, m,iprint,*nbd,*iwa, *isave;
        double f, factr, pgtol,*x,*l,*u,*g,*wa,*dsave;
        double t[7]={1,1.5,2,2.5,3,3.5,5};
        double y[7]={10.78,80.35,58.81,43.04,23.05,12.35,6.61};

        iprint = 1;
        factr=1.0E+7;        
        pgtol=1.0E-5;
        f=0.0;

        n=6;
        m=10;

        nbd=new int[n];
        iwa=new int[3*n];
        x=new double[n];
        l=new double[n];//设置变量下限
        u=new double[n];//设置变量上限
        g=new double[n];
        wa=new double[2*m*n+4*n+12*m*m+12*m];
        dsave=new double[29];
        isave=new int[44];
        str=new char[60];
        csave=new char[60];
        task=new char[60];
        lsave=new bool[16];


        for(int i=0;i         {
                nbd=0;
                l=1.0;
                u=10;
        }

        for(int i=1;i         {
                nbd=0;
                l=1.0;
                u=10;
        }

        for(int i=0;i         {
                x=0.0E0;
        }

        sprintf(task,"%s","START";

        while(1){
                lbfgsb(n,m,x,l,u,nbd,f,g,factr,pgtol,wa,iwa,task,iprint,csave,lsave,isave,dsave);
                strncpy(str,task,2);
                if (strncmp(str,"FG",2)==0)
                {
                        fcn2(7, x,t,y,f, g );
                        continue;
                }
                strncpy(str,task,5);
                if(strncmp(str,"NEW_X",5)!=0)
                {
                        for(int i=0;i                         {
                                cout<<"x["<                         }
                        break;
                }
        }

        delete[] nbd;
        delete[] iwa;
        delete[] x;
        delete[] l;
        delete[] u;
        delete[] g;
        delete[] wa;

        delete[] lsave;
        delete[] task;
        delete[] csave;
        delete[] str;
        delete[] isave;
        delete[] dsave;

        system("pause";
        return 0;
}

void CLoginDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        main();
        CDialog::OnOK();

}


这是程序
http://good.gd/767141.htm
这是算法的正确程序
http://good.gd/767144.htm

本文来自: 小木虫论坛 http://muchong.com/bbs/viewthread.php?tid=2492928

[ Last edited by swustxxl on 2010-10-20 at 20:39 ]
63楼2010-10-20 20:37:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

引用回帖:
Originally posted by swustxxl at 2010-10-20 20:37:47:
数据拟合程序,运用现成的动态链接库LBFGS法(带约束的),操作平台是VS2005,将其引入MFC单文档错误迭出——不是让楼主处理数值计算哈!!!!

我将算法程序编入了CLoginDlg.CPP中,点击button1,程序关闭对话 ...

你的程序太乱了。

你应该在OnOK里面重写一段调用dll中的算法的代码,怎么能直接调用原来console程序的main()函数呢?
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
64楼2010-10-21 09:13:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

引用回帖:
Originally posted by swustxxl at 2010-10-20 20:37:47:
        for(int i=0;i         {
                nbd=0;
                l=1.0;
                u=10;
        }

        for(int i=1;i         {
                nbd=0;
                l=1.0;
                u=10;
        }

没仔细看,随便看到这段代码,一定是有问题的。nbd,l,u都是指针啊,怎么能这样赋值呢?
这样复制以后,你又把nbd,l,u当参数传给了那个lbfgsb函数,lbfgsb函数当然会崩溃了。

[ Last edited by magic7004 on 2010-10-21 at 09:18 ]
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
65楼2010-10-21 09:17:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

swustxxl

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by magic7004 at 2010-10-21 09:17:12:


没仔细看,随便看到这段代码,一定是有问题的。nbd,l,u都是指针啊,怎么能这样赋值呢?
这样复制以后,你又把nbd,l,u当参数传给了那个lbfgsb函数,lbfgsb函数当然会崩溃了。

[ Last edited by magic ...

同样的程序代码,我用WIN32程序一切正常,难道说MFC和WIN32在接受指针和参数的时候有差别?WIN32无非没有按键的代码而已
66楼2010-10-22 10:27:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

引用回帖:
Originally posted by swustxxl at 2010-10-22 10:27:14:



同样的程序代码,我用WIN32程序一切正常,难道说MFC和WIN32在接受指针和参数的时候有差别?WIN32无非没有按键的代码而已

你一定是哪里错了,仔细看看吧。你那个代码不可能正常的。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
67楼2010-10-22 13:28:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wyq0901

铁杆木虫 (小有名气)

如何在VC++中调用catia所建的模型?


小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009:这个建议发个新贴求助,以便更多人看到。 2010-10-31 07:32:25
劳驾楼主,请问如何在VC++中调用catia所建的模型并对其进行观察?即把VC++当成类似catia编辑环境的一个容器,装载catia所建的文件后,可实现以下3个目标:
首先,实现产品演示的目的——即模型的平移、旋转、缩放功能;
其次,实现装配产品的分解目标——即两个以上的零件可以分解观察;
最后,实现选定元素的采集目标——即选定零件后,可以提取面,线等基本元素的尺寸。
说白了,就是catia里面的功能想在VC++中实现,即在自己设计的对话框中调用。
68楼2010-10-26 09:21:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)

引用回帖:
Originally posted by wyq0901 at 2010-10-26 09:21:03:
劳驾楼主,请问如何在VC++中调用catia所建的模型并对其进行观察?即把VC++当成类似catia编辑环境的一个容器,装载catia所建的文件后,可实现以下3个目标:
首先,实现产品演示的目的——即模型的平移、旋转、缩放 ...

catia是什么啊?不懂的

[ Last edited by magic7004 on 2010-10-26 at 12:23 ]
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
69楼2010-10-26 12:22:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

recen

木虫 (文坛精英)

宅!宅!宅!宅出韭菜来

优秀版主

70楼2010-10-26 12:55:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 magic7004 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见