咨询热线:0731-88808590
切换到宽版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12286|回复: 5

PDMS DARS 接口函数d3rtex不能读取表达式汉字

[复制链接]
发表于 2008-11-19 15:46:00 | 显示全部楼层 |阅读模式
以下是引用uesoft在2008-4-8 16:59:30的发言: PDMS DARS 接口函数BUG d3rtex ( "Stext", cd3tex, &id3err ) 该函数d3rtex在读取表达式时,如含有(符号时,若\'字符后面紧跟汉字字符时,返回值不正确。例如,在UESOFT网站下载的pdms工程600MW项目中,元件库GD2000,元件 =8377/70026,节点SDTE属性STEXT值在PDMS数据库中本来是: ( \'钢板焊制异径管 Φ\' + STR ( ATTRIB PARA[6 ] ) + \'X\' + STR ( ATTRIB PARA[7 ] ) ) d3rtex ( "Stext", cd3tex, &id3err )读出来的“钢板焊制异径管 Φ”正确值本来应该是: &~8V0e:8VFRl>69\ & &~&5 & 但函数d3rtex读出来的实际值变成了 “Ve8Fl6\”。 只有在PDMS界面把SDTE节点STEXT属性更新一次,读出来的值才正确。使用PML宏更新STEXT属性中的双字节字符、单字节字符,只有单字节字符能被正确读出。如果去掉STEXT字段中汉字字符前的(或者\'字符,读出来的值才正确。 \'&~8V0e:8VFRl>69\ & &~&5 &\' + STR ( ATTRIB PARA[6 ] ) + \'X\' + STR ( ATTRIB PARA [7 ] ) 细节还可参见http://www.dodoinfo.com/b/dispbbs.asp?boardid=19&id=1837&page=&move=next [此贴子已经被作者于2008-4-11 9:20:52编辑过]
以下是引用DigVisPDMS在2008-4-8 18:18:56的发言: 对这个没什么研究。不知有没有直接将PDMS内容导成DWG文件的独立接口程序?
以下是引用edison在2008-4-8 23:58:05的发言:好东西,好东西,uesoft可不可以发代码出来,给大家观摩学习
以下是引用aladin在2008-4-9 7:34:16的发言: edison哥们,你可以自己研究Dars的程序代码和接口函数,一样可以。 C:\AVEVA\Pdms11.6.SP4\dars下有示例代码
回复

使用道具 举报

 楼主| 发表于 2008-11-19 15:47:00 | 显示全部楼层
以下是引用uesoft在2008-4-9 11:57:10的发言:

应edison要求,上传简单测试代码。VC++6.0编译,请注意d3lib.lib和d3lib.dll位置并确保d3lib.dll为解密版本。

// DataAccessTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "DataAccessTest.h"
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>
#include "d3libc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define HH( strtext ) "_g_"###strtext##"yes"

#define DARS_CHECKED( iErrFlag )\
if ( iErrFlag == 308 || iErrFlag == 301 )\
{\
d3erst();\
iErrFlag = 0;\
}\
if ( iErrFlag != 0 )\
{\
ASSERT( FALSE );\
return FALSE;\
}


/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

#define PARAM_ARRAY_LEN 100
void SetEnvironment( const CString& strPrjName );


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
std::cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
LOGICAL lval = false;
DARS_MESS cd3msg = {0};
PDMS_TEXT cd3tex;
DARS_CERR cd3err ;
int iParams [ PARAM_ARRAY_LEN ] ;
float fParams [ PARAM_ARRAY_LEN ] ;
int id3err, id3nou, id3log;
int iNum = 5;
float fValue;

PDMS_NAME NAME;
PDMS_NAME cd3rfa[5];
PDMS_WORD TYPE;
PDMS_DBNAME cd3nam;
PDMS_WORD cd3typ;
// float cd3rfa[4] = {0};

CString strText = HH( hello );

cout << strText << endl;
SetEnvironment( "SAM" );
/*
HINSTANCE h116 = :oadLibrary( "d3lib.dll" );
HINSTANCE h115 = :oadLibrary( "d3lib___________.dll" );
HINSTANCE h1151 = :oadLibrary( "d3lib___________.dll" );
if ( h116 == NULL && h115 == NULL )
{
AfxMessageBox( "" );
return 0;
}

FARPROC pFun116 = GetProcAddress ( h116, "d3init" );
FARPROC pFun115 = GetProcAddress ( h115, "d3init" );
typedef void (*FUNTYPE)( char*, char*, char*, char*, char*, int* );

if ( pFun116 != NULL )
{
FUNTYPE p = (FUNTYPE)pFun116;
(*p)( "SAM", "SYSTEM", "XXXXXX", "FULL", " ", &id3err );

}
if ( pFun115 != NULL )
{
FUNTYPE p = (FUNTYPE)pFun115;
(*p)( "SAM", "SYSTEM", "XXXXXX", "FULL", " ", &id3err );

}
*/
/* Project entry */
try
{
d3init ( "MMQ", "SYSTEM", "XXXXXX", "FULL", " ", &id3err ) ;
// HINSTANCE h115 = :oadLibrary( "d3lib115.dll" );
// if ( h115 == NULL )
// {
// AfxMessageBox( "" );
// return 0;
// }
// typedef void (*FUNTYPE)( char*, char*, char*, char*, char*, int* );
// FARPROC pFun115 = GetProcAddress ( h115, "d3init" );
// if ( pFun115 != NULL )
// {
// FUNTYPE p = (FUNTYPE)pFun115;
// (*p)( "SAM", "SYSTEM", "XXXXXX", "FULL", " ", &id3err );
// }
}
catch (...)
{
AfxMessageBox("登陆异常");
}
d3mmdb ( "PAD/DESIGN", " ", &id3err ) ;

d3mnam ( "=8377/64765", &id3err ) ;
d3rtyp ( TYPE, &id3err );
//
// d3mrel ( "FIRS", "MEMB", &id3err );
d3rnam ( "NAM", NAME, &id3err );
// d3rrfa ( "Rule Set", &iNum, cd3rfa, &id3nou, &id3err );
// d3rrea ( "Tsize", &fValue, &id3err );
// d3rint ( "Truncate",&id3log, &id3err );
// d3rlog ( "Lvisibility", &id3log, &id3err );
// d3rlog ( "Blnk", &id3log, &id3err );
// d3rref ( "Idlname", cd3nam, &id3err );
// d3rorl ( "OWN", cd3rfa, &id3err );
// d3rprl ( "OWN", cd3rfa, &id3err );
// d3rwor ( "Pjustificatio", TYPE, &id3err );
// d3rtex ( "Length", cd3tex, &id3err );
// d3rra ( "Xyposition", &iNum, cd3rfa, &id3nou, &id3err );
// d3rtyp ( cd3typ, &id3err );
d3rtex ( "Rtext", cd3tex, &id3err );
d3rtex ( "Stext", cd3tex, &id3err );
// d3rtex ( "Ptdistance", cd3tex, &id3err );
// d3rrea ( "P", &fValue, &id3err );
// d3rtex ( "PYLE", cd3tex, &id3err );

/* Cancel monitor and output message */
d3umon ( "NONE" ) ;
d3emsg ( &id3err, &lval, cd3msg ) ;
printf ( "%s\n", cd3msg ) ;
d3fin ( &id3err ) ;
// d3fend ( ) ;
system( "pause" );
int a = 1;
int& b= a;
int* p = &a;
delete p;
cout << a << endl;
// UETypeImp<double> *pdValue = new UETypeImp<double>;
// *pdValue = a;
// int b = pdValue->m_obj;
// cout << b << endl;

/*
int* pIn = &a;
int* pIn2 = pIn;
int*& pIn3 = pIn;
int** pP1 = &pIn;
int** pP2 = &pIn2;
int** pP3 = &pIn3;
*/
nRetCode = 0;
}

return nRetCode;
}

void SetEnvironment( const CString& strPrjName )
{
try
{
// CString strPdms = "D:\AVEVA\Pdms11.6.SP3";
CString strPdms = "D:\AVEVA\Pdms11.5.SP1";
char buffer[4096] = {0};
CString strPath;
SetEnvironmentVariable( "PDMSEXE", strPdms );
GetEnvironmentVariable( "path", buffer, 4096 );
strPath = buffer;
SetEnvironmentVariable( "path", strPath+';'+strPdms+';'+strPdms+"\dars;"+strPdms+"\autodraftACAD;" );
SetEnvironmentVariable( "pdmswk", strPdms+"\pdmswk" );
SetEnvironmentVariable( "pmllib", strPdms+"\pmllib" );
SetEnvironmentVariable( "pdmsui", strPdms+"\pdmsui" );
SetEnvironmentVariable( "PDMSPLOTS", strPdms+"\pdmsui"+"\plots" );
SetEnvironmentVariable( "pdmsdflts", strPdms+"\pdmsui"+"\DFLTS" );
SetEnvironmentVariable( "TEMP", strPdms+"\pdmswk" );
SetEnvironmentVariable( "pdmsuser", strPdms+"\pdmsuser" );
SetEnvironmentVariable( "PDMSREPDIR", strPdms+"\PDMSUI\REPORTS" );
SetEnvironmentVariable( "PLOTCADC", strPdms+"\plot\PLOT.EXE" );
SetEnvironmentVariable( "ADC_PLOT_DIR", "%PLOTCADC%" );
SetEnvironmentVariable( "PDMSHELPDIR", strPdms+"\onlinehelp" );
SetEnvironmentVariable( "mas000", strPdms+"\project\mas000" );
SetEnvironmentVariable( "masmac", strPdms+"\project\masmac" );
SetEnvironmentVariable( "masiso", strPdms+"\project\masiso" );
SetEnvironmentVariable( "maspic", strPdms+"\project\maspic" );
SetEnvironmentVariable( "sam000", strPdms+"\project\sam000" );
SetEnvironmentVariable( "sammac", strPdms+"\project\sammac" );
SetEnvironmentVariable( "samiso", strPdms+"\project\samiso" );
SetEnvironmentVariable( "sampic", strPdms+"\project\sampic" );
SetEnvironmentVariable( "imp000", strPdms+"\project\imp000" );
SetEnvironmentVariable( "impmac", strPdms+"\project\impmac" );
SetEnvironmentVariable( "impiso", strPdms+"\project\impiso" );
SetEnvironmentVariable( "imppic", strPdms+"\project\imppic" );
SetEnvironmentVariable( "jjp000", "D:\PROJECT\JJP000 " );
SetEnvironmentVariable( "jjpmac", "D:\PROJECT\jjpmac" );
SetEnvironmentVariable( "jjpiso", "D:\PROJECT\jjpiso" );
SetEnvironmentVariable( "jjppic", "D:\PROJECT\jjppic" );
SetEnvironmentVariable( "MMQ000", "D:\PROJECT\MMQ000 " );
SetEnvironmentVariable( "MMQmac", "D:\PROJECT\MMQmac" );
SetEnvironmentVariable( "MMQiso", "D:\PROJECT\MMQiso" );
SetEnvironmentVariable( "MMQpic", "D:\PROJECT\MMQpic" );
}
catch (...)
{
AfxMessageBox("设置环境变量异常");
}
}

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-19 15:49:00 | 显示全部楼层
以下是引用uesoft在2008-4-9 11:59:54的发言:
下载信息
图片点击可在新窗口打开查看点击浏览该文件:dataaccesstest.zip


以下是引用edison在2008-4-9 21:38:42的发言:

怎么都是C++的,有C#的吗?

C++我们没人懂。

以下是引用uesoft在2008-4-10 8:43:28的发言:我们没有C#。AutoPDMS不可能使用C#开发,即使使用C#开发出来也不可能变成商业化软件,特别是效率和性能方面,甚至开发方便性方面。

以下是引用uesoft在2008-4-10 9:11:14的发言:

希望各位领导把这个帖子帮忙转给aveva开发人员。我除了2003年见过他们的人以外,好多年没联系过他们了,这几年跟设计院都很少联系。呵呵,惭愧......

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-19 15:52:00 | 显示全部楼层

以下是引用PDMAX来了在2008-4-10 19:48:38的发言:
从开发的方便性来说, C++不可能与C#相提并论. 至于性能, 这类软件的性能瓶颈一般在三维图形显示和数据存取方面, 这两样都不是开发语言决定的. PDMS和ACAD都在向.net靠拢. PDMAX也完全使用C#开发, 通过PDMSDars接口与PDMS无缝连接.

Dars函数的使用形式, 与用ADO的记录集指针操作数据库有些类似. C#操作Dars函数与C++区别不大. 虽然牵涉到转换Unicode和指针时稍嫌麻烦, 但在底层封装一下就好了. edison如果需要这方面资料, 可以与我们联系.

以下是引用edison在2008-4-10 23:28:43的发言:

PDMAX又是什么东东?

楼上的,是高手。资料给我发一份,谢谢了。

以下是引用uesoft在2008-4-11 9:32:22的发言:

如果想开发商业化软件,奉劝谨慎一点选择。当然,只是闹桌玩玩用C#是很不错的了。这是我过去的亲身体会使用VB得到的教训。也许你会说C#比VB先进,随便兄弟你听不听罢,我可是一番好心。至于使用C#开发了与PDMS的无缝接口,还是不错的,就看您这篇大作怎么写了,鸿篇巨著应该选VC++,散文诗歌也许您选C#很正确,可是您真的准备一辈子做散文家诗人吗?

以下是引用pivot在2008-4-11 11:03:27的发言:呵呵,好多的牛人!

以下是引用aladin在2008-4-11 13:22:40的发言:

现代软件设计,基于FrameWork,用C#,C++,B等,都可以。看清对象,看人下菜碟,最合适的是最好的。杀鸡用牛刀,也是可以的,只是付出的成本,不一样而已。C#,C++都是很好的工具,但是本人处理一般的问题,用得最多的还是VBA。微软Office从底层到所有的架构,都是采用VB写出来的,一样优秀。

中国人民小米加步枪,照样和鬼子抗衡8年,落后的武器与装备,照样和美帝拼杀在朝鲜战场。当然我们如果能有鬼子同样的武器装备,与之相匹配,我们的胜利可能更早一点,牺牲更少一点。

如果要写大型的软件还是采用大型的工具,更为匹配一点。

C#写出工厂设计软件,也不是完全不可能的,当年的PDMS,就是用Fortran写的,一样用到今天,还没有完全脱掉Fortran的乌龟壳。

绝对武器制胜论是要不得的,国共战争的鲜明对比,说明武器是一方面的因素,重要的是人的因素。

英国人武器很精良,被日本鬼子包围,照样投降。台儿庄战役,虽然伤敌8000,自损一万,但是国军取得了胜利,之后如果每一场战役,都象台儿庄战役那样,国军统治的应该是整个华夏大地。然而,之后的每一场战役都没有血战到底的决心,每战必败,导致大好河山沉沦。

这个话题好像没有争论的价值和意义,可能只是表达个人的观点和认识不一样而已。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-19 15:53:00 | 显示全部楼层

以下是引用pivot在2008-4-11 14:04:19的发言:支持阿拉丁!

以下是引用uesoft在2008-4-11 18:05:41的发言:

下面的结论并不能说明先进的武器到底发挥了多少作用,因为还有战略计划、战役指挥管理等各种因素。我采用了美国人自己公布的数字,没有采用中国或其他来源,主要是为了简化文字,不是说明美国一定比中国的或其他第三方的数据准确。相关资料可查阅:

美国几次大的战争伤亡人数对比

1950-1953朝鲜战争

1,美中死亡比例1:10 美国死7.5万,中国80万,朝鲜80万,韩国80万。资料来源:美《亚洲史》,海南出版社

2,美中死亡比例1:3 美国死5.4万,中国14万,朝鲜 万,韩国 万。资料来源:http://zhidao.baidu.com/question/8945848.html http://cache.tianya.cn/publicforum/content/free/1/1091590.shtml

1961-1975越南战争

美越死亡比例1:29 美国死5.6万,越南160万。http://news.sina.com.cn/w/2005-04-30/11295792680s.shtml

2003-伊拉克战争

1,美伊死亡比例1:100,1:430 美国死0.4万,伊拉克准军事人员40万,全体173万。 http://75317783.blog.163.com/blog/static/7506370200732103555285/

(我真的不想粘贴这些血淋淋的数字。)

[此贴子已经被作者于2008-4-11 18:08:57编辑过]

以下是引用uesoft在2008-4-11 18:15:43的发言:

当今产值最大的软件应该是嵌入式软件,大量的嵌入式软件都是采用C、C++甚至汇编开发的。

尽管我用过汇编、Fortran、Quick Basic、VB、VC++,但我编源代码最多的还是VB代码,我很喜欢VB,可是我知道VB是不可能开发商业软件的,虽然据说用友UFSOFT财务软件使用VB开发的而且王文京董事长还是人大代表,用友也有很好的效益和利润,可是我知道UESOFT不用VC++一定不能生存。

以下是引用PDMAX来了在2008-4-11 21:34:12的发言:
散文诗歌如果要写好, 也需要很深的功力. PDMAX发展初期, 自然是从短篇开始. C++自有他的优势,ACAD的内核至今仍用它, 不过我们在别人的图形和数据库基础上, 用C#做应用层面的开发也未尝不可. 讨论孰优孰劣意义不大, 适合与否也需要时间检验.

AutoPDMS这部鸿篇巨著, 大家已经期待很久了, uesoft大叔太会吊人胃口.


to edison, 我在PML二次开发区发了个简单的C#样例程序, 操作pdms的dar函数.

[此贴子已经被作者于2008-4-11 22:41:13编辑过]

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-19 15:55:00 | 显示全部楼层

以下是引用uesoft在2008-4-12 8:23:42的发言:年轻人,我很佩服你的决心、勇气和能力,只要你一直坚持下去,我相信你一定能成功!可否谈谈你的一些产品思路?

以下是引用aladin在2008-4-12 8:29:57的发言:

任何事情都不要走极端,今天看着是最好,明天也许就是最次的,发展的眼光看问题。

未来给我们呈现的好东西很多,我们会眼花缭乱,但是我们的目的和方向不能迷失,我们是为我们的目的而奋斗。

而不是枪炮的玩友和粉丝,古语,玩物丧志。在使用软件工具上,目的最重要,可以说,不择手段,以最快的最经济的方式完成目标。

比如PDMS,或者SmartPlant3D是强大的武器,但是目前好多单位根本没有形成规模效应的生产力,现状是设计生产任务的绝对保障,不能立马丢弃传统的步枪鸟枪,而去玩核武器。

适时、适用、适可。

中国人讲究,天时地利人和,整体利益平衡的思想,弃车保帅,明修栈道,暗渡陈仓等等,都是中国人的智慧和思想。

以下是引用DigVisPDMS在2008-4-12 9:23:09的发言:

这个数字是非常令人震惊的,同时也表明,科学技术是第一战斗力。

以下是引用uesoft在2008-10-31 12:18:42的发言:======在 2008-10-31 10:07:11 您来信中写道:======

uesoft兄你好:

看了你的“PDMS DARS 接口函数d3rtex不能读取表达式汉字”文章,试了一下,可是pdms的 dars要什么license.dat,你能不能给我发个d3lib.dll的解密版本。多谢。

邮箱是

lzswater@sohu.com

======================================

谢谢关注此问题。我们已经在2008.06解决了这个问题。

以下是引用uesoft在2008-10-31 16:10:18的发言:[下载]PDMS DARS 动态链接库接口d3lib.dll
http://www.uesoft.com/forum.php?mod=viewthread&tid=4920&extra=page%3D1

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们

长沙优易软件开发有限公司(中文简称:优易软件,英文简称:UESOFT)是三维管道CAD/CAE一体化设计软件开发商,也是新一代三维工厂设计管理系统的开创者。公司开发的自主知识产权的管道应力分析软件AutoPSA居于中国大陆市场前2名。UESOFT于2000年10月23日经湖南省长沙市工商行政管理局核准登记设立。

联系我们

  • 地址: 中国湖南省长沙市高新区桐梓坡西路保利麓谷林语中心i区1栋718-725
  • 电话: 0731-88808590
  • Email: uesoft@163.com
© 2001-2021  Powered by Discuz! X3.4 永益科技
快速回复 返回顶部 返回列表