除了readdwgfile还有没有其他办法读取指定路径文档内容
try{
db.ReadDwgFile(lj + "\\模板\\宗地图.dwg", FileShare.ReadWrite, true, null);
}
catch (System.Exception ex)
{
Application.ShowAlertDialog(ex.Message);
return;
}
总是出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的致命错误,确定lj + "\\模板\\宗地图.dwg"这个文件是存在的。估计是cad2006的bug。决定放弃readdwgfile这种方法,但还有没有其他替代方法呢?比如com啊,dbx啊,或者引用arx函数之类的,研究了好长时间都搞不定,希望高手们帮帮忙啊! 为什么还要用AutoCAD 2006版呀?那时的objectARX.Net刚出来,功能少问题多;
你打开文件是要干什么呀?
一定要用AutoCAD 2006的话建议用COM方式吧;也可以用C#编码;
你好。因为我们这个行业绝大部分就用的2006,所以没办法啊。我想请问下,com方式怎么实现readdwgfile的功能呢? 你去VBA/VB/ActiveX/API 编程技术 这个板块找帮助或搜索吧;
我也记不清了,大概是DocumentCollection.Open这样的函数;
COM的帮助样例应该还是很多的; ///
/// DWG文件作为图块插入
///
///
static public void InsertFileAsBlock_DBX(string filename)
{ //ae.WriteMessage("FileName : " + filename);
PromptPointOptions ppopt = new PromptPointOptions("\n Insert Point :");
ppopt.AllowNone = true;
PromptPointResult ppres = ac.ed.GetPoint(ppopt);
if (ppres.Status == PromptStatus.OK)
{
Point3d tP1 = ppres.Value + ac.db.Ucsorg.GetAsVector();
double[] p1 = new double;
p1 = tP1.X; p1 = tP1.Y; p1 = tP1.Z;
csp.CurSpace.InsertBlock(p1, filename, 1, 1, 1, 0, "");
}
}
public class csp
{
public static AcadModelSpace CurSpace = null; ///
/// 以DBX方式插入dwg文件里面的一个图块
///
///
///
///
static public bool InsertBlock_DBX(string fileName, string blockName)
{
//ae.WriteMessage("DBX_InsertBlock start " );
AxDbDocument dbx = new AxDbDocument();
try
{
dbx.Open(fileName, "");
AcadBlock[] blk1 = new AcadBlock;
for (int i = 0; i < dbx.Blocks.Count; i++)
{
if (dbx.Blocks.Item(i).Name == blockName)
{
blk1 = (AcadBlock)dbx.Blocks.Item(i);
Object missing = Type.Missing;
dbx.CopyObjects(blk1, csp.CurSpace, ref missing);
an.OutSideInsert(blockName, null, true);
System.Runtime.InteropServices.Marshal.ReleaseComObject(dbx);
return true;
}
}
ae.WriteMessage("\nCann't find block : " + blockName, 1);
return false;
}
catch (System.Exception ex)
{
ae.WriteMessage(ex);
System.Runtime.InteropServices.Marshal.ReleaseComObject(dbx);
return false;
}
}
谢谢,我研究下
页:
[1]