iCAx开思工具箱

标题: 【求助】UG .dll文件可移植性问题 [打印本页]

作者: wlzhao33    时间: 2003-5-14 15:50
标题: 【求助】UG .dll文件可移植性问题
昨天发现一个问题,就是一个dll文件在一个机器编译好后,移植到另外一台机器后根本就不能运行,我不得已把源代码拷过去重新编译一次。:(((
请问各位大虾,如何解决这个问题呀?尤其是一些很重要的源代码,根本不可能给别人看的情况下,那怎么办呢?
作者: zzz    时间: 2003-5-14 17:34
UG的版本是一致的吗?
作者: spline    时间: 2003-5-15 08:45
密切关注!
在相同版本的情况下我试过了。可以移植的,没有问题的。跨了版本就不一定了。
比如,18与19版之间就不一定行。因为在19版中添加了一些函数。
作者: wlzhao33    时间: 2003-5-15 09:38
版本是一样的,都是18。(不过安装时不是同一张UG安装盘)
我是直接把*.dig和*.dll文件直接拷到UGALLIANCE-site的两个目录下,我不知道你们是怎么移植的,是否要与数据库连接,因为我的程序要和oracle数据库连接,但是我认为连接数据库应该对这个没影响吧?
作者: spline    时间: 2003-5-15 12:35
这样似乎就有些麻烦了,可能要一点一点的试了。
首先确认以下小的版本是不是一致?每个大的版本之后都会有小版本的升级。还会修正一些bug。我不知道这些对他有没有影响。
其次,你说得不能运行到底是什么样子的:建议你在你的程序中加入以协调是信息,找到具体在那里不能运行。这样解决起来可能方便一点。
在此,就是操作系统的影响了。有可能你用了一些动态库或者其他的东西,在新系统中没有或者版本不一致等等。
作者: zzz    时间: 2003-5-15 14:31
先查看UG的log file啊,这是百试不爽的捷径。
还有看UG具体的版本号,象下图中的。
作者: spline    时间: 2003-5-19 08:32
对了,多谢提醒,看log files 是一个很好的方法。
作者: wlzhao33    时间: 2003-5-22 11:50
还有一个问题,就是连接数据库时,会用到用户名(User ID)和密码(Password),(在VC中一般用的是这样一条语句:hConnection =m_pConnection->Open("rovider=MSDAORA;Data Source=ORCL_192.168.0.1;User ID=PLMDB; Password=1;","","",adModeUnknown);)但对于不同的用户,用户名和密码肯定是不同的,我不知道你们有什么好的办法来解决这个问题,谢谢!!!
作者: spline    时间: 2003-5-23 08:26
做个登陆的对话框呀!
作者: wlzhao33    时间: 2003-5-23 11:44
如果我把源代码给别人,我想这样应该是可以的,但我现在给别人的只是一个*dll文件,那怎么解决呢?
作者: spline    时间: 2003-5-23 12:36
在你的dll中添加一个登陆的对话框呀。不然就只有用当前操作系统登陆用户了
作者: wlzhao33    时间: 2003-5-28 16:23
在dll中添加一个登陆的对话框困难吗?你做过这样的实际例子吗?希望你最好说的详细点,谢谢!!!
作者: spline    时间: 2003-5-28 19:24
那就用mfc来做,做一个动态库。
作者: wlzhao33    时间: 2003-5-29 11:20
刚才请教了一位高手,他建议我用UDL,我也觉得这种方法可能更简单,而且也更容易实现。spline,你认为这种方法和你所说的方法哪种更简单,更容易实现,而且用户使用也觉得方便。
  
作者: spline    时间: 2003-5-29 12:10
UDL我不是很清楚,我突然考虑到一个问题,就是我说的方法安全性很差,不适合用来做身份验证。那还是按那位高手的方法吧。
  
希望你能给我讲讲UDL,谢谢
作者: wlzhao33    时间: 2003-5-30 10:07
UDL是用来测试连接的,比如说一台机器上装了一个数据库的客户端,为了验证是否连接上数据库,可以通过UDL来进行测试。附上一个UDL。
作者: wlzhao33    时间: 2003-6-22 13:27
前几天自己作了一个对话框,终于可以动态连接数据库了(SE我是连接通过了的),下面是具体的代码。不过是连接Oracle的,如果要连接其他数据库,必须修改“Provider=MSDAORA;”这儿,这也是一个缺陷吧。
本来UDL也可以连接的,可惜我没有成功,如果那位有兴趣,可以去试试,我本来有一点代码,可惜一时没找到。不过要是谁连通了请说一声。
  
int Init;
_ConnectionPtr m_pConnection;
HRESULT hConnection;
static int i=AfxOleInit(); //初始化 com 接口
void InitDatabase()
{
  CString TempShuJuYuan,TempYongHuMing,TempMiMa,str;
  Init=1;  //默认会写入数据源,用户名和密码//
  
  hConnection= m_pConnection.CreateInstance("ADODB.Connection");
  try
  {
    if(SUCCEEDED(hConnection))
    {
      CInitDataBaseDialog dlg;
      if(dlg.DoModal()==IDOK)
      {
        TempShuJuYuan=dlg.m_ShuJuYuan;
        TempYongHuMing=dlg.m_YongHuMing;
        TempMiMa=dlg.m_MiMa;
      }
      else
      {
        Init=0;
        return;
      }
        
    str.Format("rovider=MSDAORA;Data Source=%s;User ID=%sassword=%s;",TempShuJuYuan,TempYongHuMing,TempMiMa);
    _bstr_t bstr(str);
    hConnection =m_pConnection->Open(bstr,"","",adModeUnknown);
    AfxMessageBox("数据库连接成功!");
    }
  }
  catch(_com_error e)///捕捉异常
  {
    CString errormessage;
    errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///显示错误信息
  }
}
作者: wlzhao33    时间: 2003-6-23 15:25
用UDL连接时的部分资料
ADO连接对象可以很方便地使用UDL文件来连接数据源,下面例子使用my_data1.udl来创建ADO连接。  
_ConnectionPtr m_pDBConn;  
m_pDBConn.CreateInstance(__uuidof(Connection));  
m_pDBConn->ConnectionString ="File Name=c:\mydir\my_data1.udl";  
m_pDBConn->Open("","","",NULL);  
这样一来无论数据源如何变化,在软件中都可以用统一的方法编程。当数据源改变时,只要双击相应的udl文件即可可视化地设置数据源,无需更改软件。  
因为ADO是COM接口,为了软件的可靠性,打开ADO连接时,可以加入异常处理代码。  
try{  
m_pDBConn->Open("","","",NULL);  
}catch(_com_error &e){  
//处理异常的代码  
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .   
m_pDBConn=NULL;  
}  
因为_ConnectionPtr m_pDBConn是智能指针,应在处理异常代码时将智能指针设为NULL后将自动将引用计数降为0。  
如果不出现异常,只要在使用完m_pDBConn,只要引用Close方法即可。




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3