明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2770|回复: 8

刚学ObjectARX2006实例教程 就遇到个问题

[复制链接]
发表于 2009-8-20 15:31:00 | 显示全部楼层 |阅读模式

刚学就遇到个编译的问题,我的系统式vc.NET2003,按照例子操作,编译时提示无法解析的外部符号,请高手帮忙解决。新人遇到问题不知道如何分析,请高人不吝赐教。

错误提示如下:

Step01 error LNK2019: 无法解析的外部符号 "public: static class AcRxClass * __cdecl AcEdCommandStack::desc(void)" (?desc@AcEdCommandStack@@SAPAVAcRxClass@@XZ) ,该符号在函数 "public: static class AcEdCommandStack * __cdecl AcEdCommandStack::cast(class AcRxObject const *)" (?cast@AcEdCommandStack@@SAPAV1@PBVAcRxObject@@@Z) 中被引用

原代码如下:(程序打包上传到附件,方便大家帮我解决问题时调试)

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

void initApp();
void unloadApp();
void helloWorld();

void initApp()
{
    // register a command with the AutoCAD command mechanism
    acedRegCmds->addCommand("HELLOWORLD_COMMANDS",
                            "Hello",
                            "Bonjour",
                            ACRX_CMD_TRANSPARENT,
                            helloWorld);
}

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

void helloWorld()
{
 acutPrintf("\nHello World!"); //实现本程序的具体功能
}

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2009-8-21 03:30:00 | 显示全部楼层
把#include "arxHeaders.h"头文件加进去。
#include <aced.h>
#include <rxregsvc.h>
这两个去掉!
 楼主| 发表于 2009-8-21 08:57:00 | 显示全部楼层

谢谢您的解答,我按照您的方法,把#include "arxHeaders.h"头文件加进去,编译得到很多其他提示,提示都是说C:\Program Files\Autodesk\ObjectARX 2006\inc文件夹下的很多文件中有问题,是不是我的ObjectARX 2006有问题啊?

发表于 2009-8-21 10:08:00 | 显示全部楼层
难说,我编译可以通过的。
发表于 2009-8-21 10:11:00 | 显示全部楼层
忘了问了,你除了包含头文件以外,不知道库文件(.lib文件)有没有添加?
 楼主| 发表于 2009-8-21 11:55:00 | 显示全部楼层

您说的添加lib是在属性页中加吗?我刚开始学习arx,还没入门,很多东西不清楚,您能加我qq吗?67086887,我拜你为师^_^,我是按下面的教程做的,请你给指点下什么地方有问题。

1.1 创建一个ObjectARX 项目
运行Visual C++ .NET,然后逐步创建第一个ObjectARX 应用:
1.从Visual C++ .NET 的菜单,选择[文件] >[新建]>[项目…]>[VC++ 项目]>[Win32 项
目];
2.键入新项目的存放路径和项目名称,如“d:”,“Step01”;(图1.1.2)
3.单击[完成],弹出[Win 32 应用程序向导]对话框;
4.选择[应用程序设置]属性页,在“应用程序类型:”中选择 "DLL";(图1.1.4)
5.单击[完成],即完成了一个新项目的创建。
1.2 设置编译器
1.从Visual C++ .NET 的菜单,选择[视图]>[属性页],弹出“属性页”对话框;
2.在[配置]下拉列表中,选择“所有配置”;(图1.2)
3.选择[C/C++]节点,进行如下设置:
[常规]/[附加包含目录]设置为:C:\Program Files\Autodesk\ObjectARX2006\inc
[常规]/[警告等级]设置为:1 级 (/W1)
[常规]/[检测64 位可移植性问题]设置为:否
[代码生成]/[运行时库]设置为:多线程 DLL (/MD)
4.单击[应用],完成编译器的设置。
1.3 设置链接器
1.选择[链接器]节点,进行如下设置:
[常规]/[输出文件]设置为:$(OutDir)/Step01.arx
[常规]/[附加库目录]设置为:C:\Program Files\Autodesk\ObjectARX2006\lib
[ 输入]/[ 附加依赖项] 设置为: rxapi.lib acdb16.lib acge16.lib acad.lib
acedapi.lib
2.单击[完成],完成链接器的设置。
1.4 添加代码
1.4.1 创建一个新的cpp 文件
(1)从Visual C++ .NET 的菜单,选择[项目] >[添加新项],弹出“添加新项”对话框;
(2)在[添加新项]下拉列表中,选择“C++ 文件 (.cpp)”;
(3)键入存放路径“d:\Step01\”和文件名“HelloWorld”;
(4)单击[打开],创建了一个空的cpp 文件。
1.4.2 添加代码
在HelloWorld.cpp 窗口,添加如下代码:
#include "stdafx.h"
#include <aced.h>
#include <rxregsvc.h>
void initApp();
void unloadApp();
void helloWorld();
void initApp()
{
// register a command with the AutoCAD command mechanism
acedRegCmds->addCommand("HELLOWORLD_COMMANDS",
"Hello",
"Bonjour",
ACRX_CMD_TRANSPARENT,
helloWorld);
}
void unloadApp()
{
acedRegCmds->removeGroup("HELLOWORLD_COMMANDS");
}
void helloWorld()
{
acutPrintf("\nHello World!"); //实现本程序的具体功能
}
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
switch (msg)
{
case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(pkt);
acrxRegisterAppMDIAware(pkt);
initApp();
break;
case AcRx::kUnloadAppMsg:
unloadApp();
break;
default:
break;
}
return AcRx::kRetOK;
}
为了使AutoCAD 能访问acrxEntryPoint()函数,还需要创建一个def 文件。
1.5 创建DEF 文件
1.5.1 创建一个新的def 文件
(1)从Visual C++ .NET 的菜单,选择[项目] >[添加新项],弹出“添加新项”对话框;
(2)在[添加新项]下拉列表中,选择“def 文件 (.def)”;
(3)键入存放路径“d:\Step01\”和文件名“ArxProject”;
(4)单击[打开],创建了一个def 文件。
1.5.2 添加代码
在ArxProject.def 窗口,已经有了一行代码
LIBRARY Step01
再添加如下代码:
EXPORTS
acrxEntryPoint PRIVATE
acrxGetApiVersion PRIVATE
1.6 编译和运行Step01
编译Step01 项目,应该不会有什么问题,生成Step01.arx。
运行Acad2006,加载Step01.arx。
在命令行键入“hello”。
则在命令行上打印输出:“Hello World!”。

发表于 2009-8-21 12:27:00 | 显示全部楼层
你先用ArxWizards向导做开发吧,初学时不好自己配置环境。向导安装包在utils/ObjARXWiz里头。我平时不在线,所以加QQ不方便,用邮箱吧。opensourcewj@gmail.com.
 楼主| 发表于 2009-8-21 12:39:00 | 显示全部楼层
您是说安装这个吧?&lt;ObjectARX SDK 文件夹&gt;\utils\ObjARXWiz\ ArxWizards.msi,我已经安装了
发表于 2009-8-27 23:40:00 | 显示全部楼层
看看警告等级和运行时库是否对 应该是多线程MD
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 14:27 , Processed in 0.196881 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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