slyrabbit 发表于 2009-8-20 15:31:00

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

刚学就遇到个编译的问题,我的系统式vc.NET2003,按照例子操作,编译时提示无法解析的外部符号,请高手帮忙解决。新人遇到问题不知道如何分析,请高人不吝赐教。
错误提示如下:
Step01 error LNK2019: 无法解析的外部符号 "public: static class AcRxClass * __cdecl AcEdCommandStack::desc(void)" () ,该符号在函数 "public: static class AcEdCommandStack * __cdecl AcEdCommandStack::cast(class AcRxObject const *)" () 中被引用
原代码如下:(程序打包上传到附件,方便大家帮我解决问题时调试)
#include "stdafx.h"
#include
#include
void initApp();
void unloadApp();
void helloWorld();
void initApp()
{
    // register a command with thecommand 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;
}

**** Hidden Message *****

wj_job 发表于 2009-8-21 03:30:00

把#include "arxHeaders.h"头文件加进去。
#include
#include
这两个去掉!

slyrabbit 发表于 2009-8-21 08:57:00

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

wj_job 发表于 2009-8-21 10:08:00

难说,我编译可以通过的。

wj_job 发表于 2009-8-21 10:11:00

忘了问了,你除了包含头文件以外,不知道库文件(.lib文件)有没有添加?

slyrabbit 发表于 2009-8-21 11:55:00

您说的添加lib是在属性页中加吗?我刚开始学习arx,还没入门,很多东西不清楚,您能加我qq吗?67086887,我拜你为师^_^,我是按下面的教程做的,请你给指点下什么地方有问题。
1.1 创建一个ObjectARX 项目
运行Visual C++ .NET,然后逐步创建第一个ObjectARX 应用:
1.从Visual C++ .NET 的菜单,选择[文件] >[新建]>[项目…]>>[Win32 项
目];
2.键入新项目的存放路径和项目名称,如“d:”,“Step01”;(图1.1.2)
3.单击[完成],弹出对话框;
4.选择[应用程序设置]属性页,在“应用程序类型:”中选择 "DLL";(图1.1.4)
5.单击[完成],即完成了一个新项目的创建。
1.2 设置编译器
1.从Visual C++ .NET 的菜单,选择[视图]>[属性页],弹出“属性页”对话框;
2.在[配置]下拉列表中,选择“所有配置”;(图1.2)
3.选择节点,进行如下设置:
[常规]/[附加包含目录]设置为: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
#include
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!”。

wj_job 发表于 2009-8-21 12:27:00

你先用ArxWizards向导做开发吧,初学时不好自己配置环境。向导安装包在utils/ObjARXWiz里头。我平时不在线,所以加QQ不方便,用邮箱吧。opensourcewj@gmail.com.

slyrabbit 发表于 2009-8-21 12:39:00

您是说安装这个吧?\utils\ObjARXWiz\ ArxWizards.msi,我已经安装了

lylyliu 发表于 2009-8-27 23:40:00

看看警告等级和运行时库是否对 应该是多线程MD
页: [1]
查看完整版本: 刚学ObjectARX2006实例教程 就遇到个问题