天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 59|回复: 0

ObjectArx开发对txt文本文件的操作一例

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
// MyArxFirst.cpp : 定义 DLL 应用程序的导出函数。
//ObjectArx开发对txt文本文件的操作一例

#include "stdafx.h"
#include <aced.h>
#include <rxregsvc.h>
#include <tchar.h>

#include <fstream>
#include <iostream>
//
#include <comdef.h>


using namespace std;

//定义两个函数
void initApp();
void unloadApp();

//定义命令函数
//------------------------------------------
//打印"Hello world!"在AutoCAD Command上  的命令
void hello();

//打印文件内容 的命令
void pfvalue();

//ado连接数据库的方法 的命令
void pdbvalue();

//定义一般函数
//------------------------------------------
ACHAR* ConvertCharPtrToAcharPtr(const char* src);
ACHAR* ConvertCharPtrToAcharPtr2(const char* src);
//
char* ConvertAcharPtrToCharPtr(const ACHAR* src);
char* ConvertAcharPtrToCharPtr2(const ACHAR* src);
//通用转换函数
_bstr_t Get_bstr_t(char* src);
_bstr_t Get_bstr_t_W(wchar_t* src);
char* GetCharPtr(_bstr_t bstrt);
wchar_t* GetWchar_t(_bstr_t bstrt);

//打印函数
void pfvalue_default(const ACHAR* filepath);

//打印文件内容2 函数
void pfvalue2(const ACHAR* filepath);

//ado连接数据库的方法 函数
void pdbvalue(const ACHAR *filepath);
//------------------------------------------

extern "C"
AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
//void acrxEntryPoint(void* pkt)
{
        switch (msg)
        {
                case AcRx::kInitAppMsg:
                        acrxDynamicLinker->unlockApplication(pkt);
                        acrxRegisterAppMDIAware(pkt);
                        initApp();
                        break;
                case AcRx::kUnloadAppMsg:
                        unloadApp();
                        break;
                default:
                    break;
        }
        return AcRx::kRetOK;
}



void initApp()
{
    //register a command with the AutoCAD command mechanism
        //string macro 用法:
        //_T("helloworld") or  __T("helloworld")  or ACRX_T("helloworld")
        acedRegCmds->addCommand(ACRX_T("HELLOWORLD_COMMANDS"),
                                    ACRX_T("ArxHsgBag"),
                                                        ACRX_T("Hello"),
                                                        ACRX_CMD_TRANSPARENT,
                                                        hello);
        acedRegCmds->addCommand(ACRX_T("PFVALUE_COMMANDS"),
                                    ACRX_T("ArxHsgBag"),
                                                        ACRX_T("pfvalue"),
                                                        ACRX_CMD_TRANSPARENT,
                                                        pfvalue);
        acedRegCmds->addCommand(ACRX_T("PDBVALUE_COMMANDS"),
                                    ACRX_T("ArxHsgBag"),
                                                        ACRX_T("pdbvalue"),
                                                        ACRX_CMD_TRANSPARENT,
                                                        pdbvalue);
        //
}


void unloadApp()
{
    acedRegCmds->removeGroup(ACRX_T("HELLOWORLD_COMMANDS"));
        acedRegCmds->removeGroup(ACRX_T("PFVALUE_COMMANDS"));
        acedRegCmds->removeGroup(ACRX_T("PDBVALUE_COMMANDS"));
}


//----------------------------------------------------
//hello命令
void hello()
{
    acutPrintf(ACRX_T("\n第一个Arx程序Hello World!"));
       
}
//打印文件内容 命令
void pfvalue()
{       
        acutPrintf(_T("开始输出文件内信息:\n"));
    const ACHAR* filepath=ACRX_T("d:\\test.txt");  //OK
        acutPrintf(filepath);        //OK
        pfvalue_default(filepath); //OK
        pfvalue2(filepath);  //OK
}
//输出数据库表内记录的命令
void pdbvalue()
{
    acutPrintf(_T("开始输出数据库表内记录:\n"));
        //...
}
//----------------------------------------------------
ACHAR* ConvertCharPtrToAcharPtr(const char* src)
{
        ACHAR* tmp;
        _bstr_t AStr = src;       
    LPWSTR AstrW = LPTSTR(AStr);
    tmp=(ACHAR *)AstrW;
        return tmp;
}
ACHAR* ConvertCharPtrToAcharPtr2(const char* src)
{
        // Convert to a wchar_t*
    size_t srcsize = strlen(src) + 1;
    size_t newsize = srcsize;       
    size_t convertedChars = 0;
    wchar_t *wcstring;
        wcstring=new wchar_t[newsize];
    mbstowcs_s(&convertedChars, wcstring, srcsize, src, _TRUNCATE);
    //wcscat_s(wcstring, L" (wchar_t *)");
    //wcout << wcstring << endl;
        return wcstring;
}
char* ConvertAcharPtrToCharPtr(const ACHAR* src)  //
{
    char* tmp;
        _bstr_t bstrt(src);
        tmp=GetCharPtr(bstrt);
        return tmp;
}
char* ConvertAcharPtrToCharPtr2(const ACHAR* src)
{
    // Convert to a char*
    size_t srcsize = wcslen(src) + 1;   
        size_t newsize = srcsize;
    size_t convertedChars = 0;
    char *nstring;
        nstring=new char[newsize];
    wcstombs_s(&convertedChars, nstring, srcsize, src, _TRUNCATE);   
        return nstring;
}
//
_bstr_t Get_bstr_t(char* src)
{
     _bstr_t bstrt(src);
         return bstrt;
}
_bstr_t Get_bstr_t_W(wchar_t* src)
{
    // Convert to a _bstr_t
    _bstr_t bstrt(src);
    //bstrt += " (_bstr_t)";
    //cout << bstrt << endl;
        return bstrt;
}
char* GetCharPtr(_bstr_t bstrt)
{
    // Convert to a char*
    size_t newsize = bstrt.length()+1;
    char *nstring;nstring=new char[newsize];
    strcpy_s(nstring,newsize,(char *)bstrt);
    //strcat_s(nstring, " (char *)");
    //cout << nstring << endl;
        return nstring;
}
wchar_t* GetWchar_t(_bstr_t bstrt)
{
    // Convert to a wchar_t*
        int srcsize=bstrt.length()+1;
    wchar_t *wcstring;wcstring=new wchar_t[srcsize];
    wcscpy_s(wcstring,srcsize,(wchar_t *)bstrt);
    //wcscat_s(wcstring, L" (wchar_t *)");
    //wcout << wcstring << endl;
        return wcstring;
}
//CComBSTR GetCComBSTR(char* src)
//{
//    // Convert to a CComBSTR
//    CComBSTR ccombstr(src);
//    /*if (ccombstr.Append(L" (CComBSTR)") == S_OK)
//    {
//        CW2A printstr(ccombstr);
//        cout << printstr << endl;
//    }*/
//        return ccombstr;
//}
//----------------------------------------------------
//打印文件内容1  C文件操作函数   OK
void pfvalue_default(const ACHAR* filepath)
{
          acutPrintf(_T("\n-----下面是c文件操作函数打开的内容-----\n"));          
          acutPrintf(filepath);acutPrintf(_T("\n"));
      FILE *fp;
          int linesize=4000;
          char *line;line=new char[linesize];
          const char* path=ConvertAcharPtrToCharPtr(filepath);
          ACHAR* wtmp=ConvertCharPtrToAcharPtr(path);          
          acutPrintf(wtmp);acutPrintf(_T("\n"));
          if((fp=fopen(path,"r"))==NULL)
          {
                  acutPrintf(_T("\nfile cannot be opened\n"));                  
          }          
          else
          {
                  const ACHAR* tmp;
                  while(!feof(fp))
                  {
                          if(fgets(line,linesize,fp)!=NULL)
                          {
                                  tmp=ConvertCharPtrToAcharPtr(line);
                                  acutPrintf(tmp);
                          }
                  }
                  fclose(fp);
          }
}

//打印文件内容2  ifstream类      OK
void pfvalue2(const ACHAR* filepath)
{       
         //--file2 open
         //filepath="d:\\test.txt";
        acutPrintf(ACRX_T("\n"));
        acutPrintf(filepath);
        ifstream r(filepath,ifstream.in);
         if(!r)
         {
                 acutPrintf(ACRX_T("打开文件出错!"));
         }
         else
         {
                 const ACHAR* tmpAchar;
                 //char line[4000];   //[100]2000
                 int linesize=4000;
                 char* line;line=new char[linesize];
                 while(r>>line)
                 {                          
                          tmpAchar=ConvertCharPtrToAcharPtr(line);
                          acutPrintf(tmpAchar);
                          acutPrintf(ACRX_T("\n"));
                 }
                 r.close();       
                 acutPrintf(ACRX_T("输出文件内容完毕!"));
         }
}


//ObjectARX offers the following input functions.
//Refer to the ObjectARX Online Help for a complete description of
//how to use these functions.
//acedGetInt        used to get an integer value
//acedGetReal       used to get a real value
//acedGetString     used to get a string
//acedGetAngle      used to get a angle value
//acedGetKword      used to get a key word
//acedInitGet       used to initialize acedGetXXXX functions
//acedGetFileD      used to retrieve file selection from a file dialog
//acedGetPoint      used to pick a point
//acedGetDist       used to get the distance between two points
//acedGetCorner     see Online Help for a complete description
//
//ObjectARX offers the following functions for selection of AutoCAD entities.
//(Again refer to the ObjectARX Online Help for a complete description of
//how to use these functions).
//
//acedEntSel       used to select a single entity
//acedNEntSel      used to select a single, nested entity
//acedNEntSelP     used to select a single, nested entity
//acutSSGet        used to select multiple entities

//--the---end---

 

 

 

 

ObjectArx开发对txt文本文件的操作一例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:46 , Processed in 0.123733 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表