乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 76|回复: 4

(AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.17&qu

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2009-7-31 15:15:00 | 显示全部楼层 |阅读模式
运行时出现错误,是第一句的,请问高手如何解决
            AcadApplication app = (AcadApplication)Marshal.GetActiveObject(".Application.17");

            AcadMenuBar menuBar = app.MenuBar;
            AcadMenuGroup menuGroup = app.MenuGroups.Item(0);
            AcadPopupMenus menus = menuGroup.Menus;
            AcadPopupMenu mymenu = menus.Add("我的菜单");
            
            mymenu.AddMenuItem(0,"第一个菜单", "hello");
            mymenu.AddSeparator(1);
            mymenu.AddMenuItem(2, "2", "hello");
            AcadPopupMenu ext = mymenu.AddSubMenu(3, "Ext");
            ext.AddMenuItem(0, "Hello", "hello");
            ext.AddSeparator(1);
            ext.AddMenuItem(2, "Hello2", "hello");
            mymenu.InsertInMenuBar(menuBar.Count - 2);
            app.Application.Update();
另请问上面加载菜单至主菜单的方法正确吗?
错误信息如下:
应用程序不支持实时(JIT)调试。
有关详细信息,请参见此消息的结尾。
************** 异常文本 **************
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.InvalidCastException: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Autodesk.AutoCAD.Interop.AcadApplication”。此操作失败的原因是对 IID 为“{93BC4E71-AFE7-4AA7-BC07-F80ACDB672D5}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 不支持此接口 (异常来自 HRESULT:0x80004002 (E_NOINTERFACE))。
   在 ClassLibrary.Class.AddMenuCom() 位置 E:\CAD2007 Lab\CAD_lab2\CAD_lab2\Class.cs:行号 160
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   在 AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object commandObject, Boolean bLispFunction)
   在 AcMgCommandClass.Invoke(AcMgCommandClass* , gcroot* mi, Boolean bLispFunction)
   在 Autodesk.AutoCAD.Runtime.TargetInvocationSEHExceptionFilter.InvokeWorker()
   在 Autodesk.AutoCAD.Runtime.ExceptionFilter.Invoke()
************** 已加载的程序集 **************
mscorlib
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码:
----------------------------------------
acdbmgd
    程序集版本: 17.0.54.0
    Win32 版本: 17.0.54.0
    基本代码:
----------------------------------------
msvcm80
    程序集版本: 8.0.50727.762
    Win32 版本: 8.00.50727.762
    基本代码:
----------------------------------------
System
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码:
----------------------------------------
System.Xml
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码:
----------------------------------------
System.Drawing
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码:
----------------------------------------
System.Windows.Forms
    程序集版本: 2.0.0.0
    Win32 版本: 2.0.50727.42 (RTM.050727-4200)
    基本代码:
----------------------------------------
acmgd
    程序集版本: 17.0.54.0
    Win32 版本: 17.0.54.0
    基本代码:
----------------------------------------
AcDxUi
    程序集版本: 17.0.54.0
    Win32 版本: 17.0.54.0
    基本代码:
----------------------------------------
AcDx
    程序集版本: 17.0.54.0
    Win32 版本: 17.0.54.0
    基本代码:
----------------------------------------

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2009-8-2 09:52:00 | 显示全部楼层
检索出clsid为6AB55F46-2523-4701-A912-B226F46252BA,请部如何加入?
回复

使用道具 举报

0

主题

31

帖子

4

银币

初来乍到

Rank: 1

铜币
31
发表于 2009-7-31 16:10:00 | 显示全部楼层
你用CLSID去查找CAD接口然后再去操作。
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
2
发表于 2013-8-15 18:24:00 | 显示全部楼层
var app =Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as AcadApplication;
回复

使用道具 举报

34

主题

372

帖子

7

银币

中流砥柱

Rank: 25

铜币
508
发表于 2013-8-29 14:08:00 | 显示全部楼层
如果是VC中使用,我的代码是这么写的;
IAcadApplication acadApp;
                                        CLSID clsid;
                                        LPUNKNOWN pUnk = NULL;
                                        LPDISPATCH pDispatch = NULL;
                                       
                                        HRESULT hr = ::CLSIDFromProgID(L"AutoCAD.Application", &clsid);                        
                                        if (SUCCEEDED(hr))
                                        {
                                                if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK)                // 如果有AutoCAD正在运行就获得它的OLE指针
                                                {
                                                        pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pDispatch);
                                                        acadApp.AttachDispatch(pDispatch);
                                                        pUnk->Release();
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 07:55 , Processed in 0.248176 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表