我要创建两个DLL,但是如何进行它们之间的数据交换(或者一个调用一个的数据),是不是在一个DLL中的自定义一个寒暑,然后输出,有另一个来调用。但是我试验一次不行,求教!!!请详细说明!!!谢了,先~!!

解决方案 »

  1.   

    你那两个DLL是怎么调用的,如果都是在主程序中调用,那样好像只能通过主程序来交换数据。如果在一个DLL中调用另一个DLL的话,应该可以直接调用另一个DLL中的函数
      

  2.   

    这么说吧,我在一个软件中调用一个主DLL(PTC.dll),然后它去调用另一个DLL(MFC.dll, Dependency of PTC),然后我要用的程序(PRO/E)调用PTC,PTC调用MFC,由MFC向PTC传输数据,怎么进行!!!
    请写明!!
    谢了,先!!
      

  3.   

    在MFC.CPP中定义的函数LoadDlg是为了能从PRO/E中调用由MFC.dll生成的对话框,同时能够传递有对话框得到的数据(4个),定义如下:
    _declspec(dllexport) void LoadDlg(Box* box)
    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    Box* m_pBox=new Box(); 
    CMyDlg111 dlg;
    m_pBox->c=dlg.m_c;
    m_pBox->m=dlg.m_m;
    m_pBox->y=dlg.m_y;
    m_pBox->k=dlg.m_k;
    int i;
    i=aaa1.DoModal();
    if(i==0)
    {
    AfxMessageBox("对话框调用失败");
    }
    }
    然后在PTC中的MainPTC.CPP(我自己编写的,为了能够在PRO/E中画图)中调用,
    void Load_Dlg()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    Box* m_pBox=new Box(); 
    LoadDlg(m_pBox);
    //savedata(c,k,m,y);
    ProMdl part;

    ProParameter param1;
    ProParameter param2;
    ProParameter param3;
    ProParameter param4;
    ProParamvalue value1;
    ProParamvalue value2;
    ProParamvalue value3;
    ProParamvalue value4;
    ProModelitem feature;
    int i;
    int teethnum1;
    double pitch1,angle1,width1;
    ProMdlRetrieve(L"C:\\Documents and Settings\\Administrator\\桌面\\新建文件夹\\spur_gear.prt.1", PRO_MDL_PART, &part);


    ProMdlIdGet(part,&i);
    ProModelitemInit(part,i,PRO_PART,&feature);

    ProParameterInit(&feature, L"TEETH", &param1);
    ProParameterInit(&feature, L"PITCH", &param2);
    ProParameterInit(&feature, L"ANGLE", &param3);
    ProParameterInit(&feature, L"WIDTH", &param4);

    value1.type=PRO_PARAM_INTEGER;
    value1.value.i_val=m_pBox->c;
    value2.type=PRO_PARAM_DOUBLE;
    value2.value.d_val=1/m_pBox->m;
    value3.type=PRO_PARAM_DOUBLE;
    value3.value.d_val=m_pBox->y;
    value4.type=PRO_PARAM_DOUBLE;
    value4.value.d_val=m_pBox->k;
    ProParameterValueSet(&param1, &value1);
    ProParameterValueSet(&param2, &value2);
    ProParameterValueSet(&param3, &value3);
    ProParameterValueSet(&param4, &value4);
    ProSolidRegenerate((ProSolid)part, PRO_B_TRUE);
    ProMdlDisplay(part);
    }
    其中Load_Dlg是调用函数;
    我在PTC中加入了一个Import.h文件,是调入由MFC省城的Loaddlg函数,Import.h文件如下:
    #pragma once// 加载系统数据结构的头文件声明
    #include "MFC\datastruct.h"
    #include "stdafx.h"
    // 库文件导入列表
    _declspec(dllimport) void LoadDlg(Box* box);
    // 函数声明(主要是调用导入库的函数)
    void Load_Dlg();
    我又在MFC中定义了一个数据结构的文件DataStruct.h:
    #pragma once
    // 整个工程数据结构的声明
    typedef struct
    {
    int c;
    double m;
    double y;
    double k; 
    }Box;
    这样我就能够在PRO/E中调用了,但是如何传递数据?(从MFC到PTC)
    谢了,先!!!
      

  4.   

    declspec(dllexport) void LoadDlg(Box* box)
    {
    ......
    Box* m_pBox=new Box(); //这是干什么用的?
    CMyDlg111 dlg;
    m_pBox->c=dlg.m_c;
    m_pBox->m=dlg.m_m;
    m_pBox->y=dlg.m_y;
    m_pBox->k=dlg.m_k;
    int i;
    i=aaa1.DoModal();//aaa1 怎么出来的?
             
    }CMyDlg111 是产生那4个所需数据的对话框吗?
      

  5.   

    好,我就假设 CMyDlg111 是数据的生产者:====================   MFC.dll ===========================declspec(dllexport) BOOL LoadDlg(Box* box)
    {
    CMyDlg111 dlg;
             
             int i=dlg.DoModal();
             if(i==0) return FALSE;
    Box->c=dlg.m_c;
    Box->m=dlg.m_m;
    Box->y=dlg.m_y;
    Box->k=dlg.m_k;
             return TRUE;
    }
    ====================================================================================== PTC.dll =====================================declspec(dllexport) BOOL PTCLoadDlg(Box* box)
    {
         BOOL i=LoadDlg(box);
         return i;
    }
    ===============================================================================================     主程序   ========================================   Box * box= new Box;
       if(PTCLoadDlg(box))
      {
         得到数据
       }else
       {
          未得到数据
       }
    ===============================================================================
      

  6.   

    关键是要你的思路清晰,不要把自己搞糊涂了。
    调dll函数跟调本地函数没差别。
      

  7.   

    CMyDlg111是产生那4个数据的对话框,忘了说了,aaa是在MFC中创建的第一个对话框,所以要调用它:
    aaa aaa1;//加一句
    _declspec(dllexport) void LoadDlg(Box* box)
    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    Box* m_pBox=new Box(); 
    CMyDlg111 dlg;
    m_pBox->c=dlg.m_c;
    m_pBox->m=dlg.m_m;
    m_pBox->y=dlg.m_y;
    m_pBox->k=dlg.m_k;
    int i;
    i=aaa1.DoModal();
    if(i==0)
    {
    AfxMessageBox("对话框调用失败");
    }
    }
      

  8.   

    在PTC中为什么是dllexport,PTC要调用对话框的,我觉得应该是dllimport才对吧?
    ========================= PTC.dll =====================================declspec(dllexport) BOOL PTCLoadDlg(Box* box)
    {
         BOOL i=LoadDlg(box);
         return i;
    }
    ========================================================================
      

  9.   

    我的MyDlg111中的是EDIT Box 来输入数据的,
    CMyDlg111 dlg;
             
             int i=dlg.DoModal();
             if(i==0) return FALSE;
    Box->c=dlg.m_c;
    Box->m=dlg.m_m;
    Box->y=dlg.m_y;
    Box->k=dlg.m_k;
             return TRUE;
    我需要在对话框中摁下按钮后,数据进行传递。
    您这么写行吗?我不太清楚!!请指点!谢谢
      

  10.   

    看来你懂得太少;我问你,你的 CMyDlg111 是干什么用的?他的作用自然是显示对话框,接受输入,并保存输入数据。int i=dlg.DoModal();
    这一句作用就是执行对话框。直到对话框关闭后i才会有直;
    当你通过 i 值确定对话框成功以后,就从里面把值读出来,这都不懂。我给你的那些语句当然编不过,他只是重点部分,
    要让他工作,你还得自己把另外 80%的代码补充完整。 给你说真实太累了