刚学ObjectARX2006实例教程 就遇到个问题
<p>刚学就遇到个编译的问题,我的系统式vc.NET2003,按照例子操作,编译时提示无法解析的外部符号,请高手帮忙解决。新人遇到问题不知道如何分析,请高人不吝赐教。</p><p>错误提示如下:</p><p>Step01 error LNK2019: 无法解析的外部符号 "public: static class AcRxClass * __cdecl AcEdCommandStack::desc(void)" (<a href="mailto:?desc@AcEdCommandStack@@SAPAVAcRxClass@@XZ">?desc@AcEdCommandStack@@SAPAVAcRxClass@@XZ</a>) ,该符号在函数 "public: static class AcEdCommandStack * __cdecl AcEdCommandStack::cast(class AcRxObject const *)" (<a href="mailto:?cast@AcEdCommandStack@@SAPAV1@PBVAcRxObject@@@Z">?cast@AcEdCommandStack@@SAPAV1@PBVAcRxObject@@@Z</a>) 中被引用</p><p>原代码如下:(程序打包上传到附件,方便大家帮我解决问题时调试)</p><p>#include "stdafx.h"<br/>#include <aced.h> <br/>#include <rxregsvc.h> </p><p>void initApp(); <br/>void unloadApp();<br/>void helloWorld();</p><p>void initApp() <br/>{ <br/> // register a command with the AutoCAD command mechanism <br/> acedRegCmds->addCommand("HELLOWORLD_COMMANDS", <br/> "Hello", <br/> "Bonjour", <br/> ACRX_CMD_TRANSPARENT, <br/> helloWorld); <br/>} </p><p>void unloadApp() <br/>{ <br/> acedRegCmds->removeGroup("HELLOWORLD_COMMANDS"); <br/>}</p><p>void helloWorld() <br/>{ <br/> acutPrintf("\nHello World!"); //实现本程序的具体功能<br/>} </p><p>extern "C" AcRx::AppRetCode <br/>acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) <br/>{ <br/> switch (msg) <br/> { <br/> case AcRx::kInitAppMsg: <br/> acrxDynamicLinker->unlockApplication(pkt); <br/> acrxRegisterAppMDIAware(pkt); <br/> initApp(); <br/> break; <br/> case AcRx::kUnloadAppMsg: <br/> unloadApp(); <br/> break; <br/> default: <br/> break; <br/> } <br/> return AcRx::kRetOK; <br/>}<br/><br/></p> 把#include "arxHeaders.h"头文件加进去。<br/>#include <aced.h> <br/>#include <rxregsvc.h> <br/>这两个去掉!<br/> <p>谢谢您的解答,我按照您的方法,把#include "arxHeaders.h"头文件加进去,编译得到很多其他提示,提示都是说C:\Program Files\Autodesk\ObjectARX 2006\inc文件夹下的很多文件中有问题,是不是我的ObjectARX 2006有问题啊?</p> 难说,我编译可以通过的。 忘了问了,你除了包含头文件以外,不知道库文件(.lib文件)有没有添加? <p>您说的添加lib是在属性页中加吗?我刚开始学习arx,还没入门,很多东西不清楚,您能加我qq吗?67086887,我拜你为师^_^,我是按下面的教程做的,请你给指点下什么地方有问题。</p><p>1.1 创建一个ObjectARX 项目<br/>运行Visual C++ .NET,然后逐步创建第一个ObjectARX 应用:<br/>1.从Visual C++ .NET 的菜单,选择[文件] >[新建]>[项目…]>>;<br/>2.键入新项目的存放路径和项目名称,如“d:”,“Step01”;(图1.1.2)<br/>3.单击[完成],弹出对话框;<br/>4.选择[应用程序设置]属性页,在“应用程序类型:”中选择 "DLL";(图1.1.4)<br/>5.单击[完成],即完成了一个新项目的创建。<br/>1.2 设置编译器<br/>1.从Visual C++ .NET 的菜单,选择[视图]>[属性页],弹出“属性页”对话框;<br/>2.在[配置]下拉列表中,选择“所有配置”;(图1.2)<br/>3.选择节点,进行如下设置:<br/>[常规]/[附加包含目录]设置为:C:\Program Files\Autodesk\ObjectARX2006\inc<br/>[常规]/[警告等级]设置为:1 级 (/W1)<br/>[常规]/[检测64 位可移植性问题]设置为:否<br/>[代码生成]/[运行时库]设置为:多线程 DLL (/MD)<br/>4.单击[应用],完成编译器的设置。<br/>1.3 设置链接器<br/>1.选择[链接器]节点,进行如下设置:<br/>[常规]/[输出文件]设置为:$(OutDir)/Step01.arx<br/>[常规]/[附加库目录]设置为:C:\Program Files\Autodesk\ObjectARX2006\lib<br/>[ 输入]/[ 附加依赖项] 设置为: rxapi.lib acdb16.lib acge16.lib acad.lib<br/>acedapi.lib<br/>2.单击[完成],完成链接器的设置。<br/>1.4 添加代码<br/>1.4.1 创建一个新的cpp 文件<br/>(1)从Visual C++ .NET 的菜单,选择[项目] >[添加新项],弹出“添加新项”对话框;<br/>(2)在[添加新项]下拉列表中,选择“C++ 文件 (.cpp)”;<br/>(3)键入存放路径“d:\Step01\”和文件名“HelloWorld”;<br/>(4)单击[打开],创建了一个空的cpp 文件。<br/>1.4.2 添加代码<br/>在HelloWorld.cpp 窗口,添加如下代码:<br/>#include "stdafx.h"<br/>#include <aced.h><br/>#include <rxregsvc.h><br/>void initApp();<br/>void unloadApp();<br/>void helloWorld();<br/>void initApp()<br/>{<br/>// register a command with the AutoCAD command mechanism<br/>acedRegCmds->addCommand("HELLOWORLD_COMMANDS",<br/>"Hello",<br/>"Bonjour",<br/>ACRX_CMD_TRANSPARENT,<br/>helloWorld);<br/>}<br/>void unloadApp()<br/>{<br/>acedRegCmds->removeGroup("HELLOWORLD_COMMANDS");<br/>}<br/>void helloWorld()<br/>{<br/>acutPrintf("\nHello World!"); //实现本程序的具体功能<br/>}<br/>extern "C" AcRx::AppRetCode<br/>acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)<br/>{<br/>switch (msg)<br/>{<br/>case AcRx::kInitAppMsg:<br/>acrxDynamicLinker->unlockApplication(pkt);<br/>acrxRegisterAppMDIAware(pkt);<br/>initApp();<br/>break;<br/>case AcRx::kUnloadAppMsg:<br/>unloadApp();<br/>break;<br/>default:<br/>break;<br/>}<br/>return AcRx::kRetOK;<br/>}<br/>为了使AutoCAD 能访问acrxEntryPoint()函数,还需要创建一个def 文件。<br/>1.5 创建DEF 文件<br/>1.5.1 创建一个新的def 文件<br/>(1)从Visual C++ .NET 的菜单,选择[项目] >[添加新项],弹出“添加新项”对话框;<br/>(2)在[添加新项]下拉列表中,选择“def 文件 (.def)”;<br/>(3)键入存放路径“d:\Step01\”和文件名“ArxProject”;<br/>(4)单击[打开],创建了一个def 文件。<br/>1.5.2 添加代码<br/>在ArxProject.def 窗口,已经有了一行代码<br/>LIBRARY Step01<br/>再添加如下代码:<br/>EXPORTS<br/>acrxEntryPoint PRIVATE<br/>acrxGetApiVersion PRIVATE<br/>1.6 编译和运行Step01<br/>编译Step01 项目,应该不会有什么问题,生成Step01.arx。<br/>运行Acad2006,加载Step01.arx。<br/>在命令行键入“hello”。<br/>则在命令行上打印输出:“Hello World!”。</p> 你先用ArxWizards向导做开发吧,初学时不好自己配置环境。向导安装包在utils/ObjARXWiz里头。我平时不在线,所以加QQ不方便,用邮箱吧。opensourcewj@gmail.com. 您是说安装这个吧?<ObjectARX SDK 文件夹>\utils\ObjARXWiz\ ArxWizards.msi,我已经安装了 看看警告等级和运行时库是否对 应该是多线程MD
页:
[1]