- 积分
- 981
- 明经币
- 个
- 注册时间
- 2016-9-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 MyNameIsLiLei 于 2022-7-8 15:17 编辑
方法一:P/Invoke
//1.先利用向导创建好ObjectArx项目,在acrxEntryPoint.cpp文件最后加入如下代码
添加代码:
extern "C"
_declspec(dllexport) const void AddCircle(void* btrPtr)
{
AcDbBlockTableRecord* btr = (AcDbBlockTableRecord*)0;
btr = (AcDbBlockTableRecord*)btrPtr;
AcDbCircle *cir = new AcDbCircle(AcGePoint3d(200,200,0),AcGeVector3d(0,0,1),50.);
btr->upgradeOpen();
btr->appendAcDbEntity(cir);
btr->downgradeOpen();
cir->downgradeOpen();
}
//2.创建.NET CAD二次开发项目,添加测试代码,将1中生成的.arx文件放到该项目生成的dll文件同一目录下调用
public class Class1
{
Document doc { get { return Application.DocumentManager.MdiActiveDocument; } }
Editor ed { get { return doc.Editor; } }
Database db { get { return doc.Database; } }
[DllImport("YYHArxTest.arx", CharSet = CharSet.Unicode)]
private static extern void AddCircle(IntPtr handle);
[CommandMethod("Test")]
public void Test()
{
using (Transaction tran = db.TransactionManager.StartTransaction())
{
DBObject obj = tran.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
AddCircle(obj.UnmanagedObject);
obj.Dispose();
tran.Commit();
}
}
}
关键点:.NET 中对象的UnmanagedObject对象与C++中的指针对应,利用这一点将托管对象转化为非托管对象
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|