|  | 
 
| 本帖最后由 syh521 于 2011-5-30 21:31 编辑 
 // Test_wchar_t.cpp : 定义 DLL 的初始化例程。
 //
 
 #include "stdafx.h"
 #include "Test_wchar_t.h"
 #include "
  roToolkit.h" #include "
  roMenu.h" #include "
  roMenubar.h" #include "
  roMessage.h" #include "
  roUtil.h" #include "
  roUICmd.h" #include <
  roWindows.h> 
 #ifdef _DEBUG
 #define new DEBUG_NEW
 #endif
 void Duangai1Fn();
 void Duangai2Fn();
 void Duangai3Fn();
 void Duangai4Fn();
 static uiCmdAccessState UsrAccessDefault(uiCmdAccessMode access_mode)//访问控制函数
 {
 
 return (ACCESS_AVAILABLE);
 
 }
 //
 //        注意!
 //
 //                如果此 DLL 动态链接到 MFC
 //                DLL,从此 DLL 导出并
 //                调入 MFC 的任何函数在函数的最前面
 //                都必须添加 AFX_MANAGE_STATE 宏。
 //
 //                例如:
 //
 //                extern "C" BOOL PASCAL EXPORT ExportedFunction()
 //                {
 //                        AFX_MANAGE_STATE(AfxGetStaticModuleState());
 //                        // 此处为普通函数体
 //                }
 //
 //                此宏先于任何 MFC 调用
 //                出现在每个函数中十分重要。这意味着
 //                它必须作为函数中的第一个语句
 //                出现,甚至先于所有对象变量声明,
 //                这是因为它们的构造函数可能生成 MFC
 //                DLL 调用。
 //
 //                有关其他详细信息,
 //                请参阅 MFC 技术说明 33 和 58。
 //
 
 // CTest_wchar_tApp
 
 BEGIN_MESSAGE_MAP(CTest_wchar_tApp, CWinApp)
 END_MESSAGE_MAP()
 
 
 // CTest_wchar_tApp 结构
 
 CTest_wchar_tApp::CTest_wchar_tApp()
 {
 // TODO: 在此添加构造代码,
 // 将所有重要的初始化放置在 InitInstance 中
 }
 
 
 // 唯一的 CTest_wchar_tApp 对象
 
 CTest_wchar_tApp theApp;
 
 
 // CTest_wchar_tApp 初始化
 
 BOOL CTest_wchar_tApp::InitInstance()
 {
 CWinApp::InitInstance();
 /*AfxOleInit();*/
 return TRUE;
 }
 extern "C" int user_initialize()
 {
 ProError     status;
 ProFileName  MsgFile;
 uiCmdCmdId   PushButton_cmd_id1,PushButton_cmd_id2,
 PushButton_cmd_id3,PushButton_cmd_id4;
 ProStringToWstring(MsgFile, "Message.txt");//设置菜单信息文件名
 
 /*=========================================================*\
 添加菜单条
 \*=========================================================*/
 status=ProMenubarMenuAdd ("UserMenuBar", "UserMenu",
 "Utilities", PRO_B_TRUE, MsgFile);
 /*=======================================================*\
 菜单条的下级子菜单设置
 \*=========================================================*/
 //添加下级子菜单项
 ProMenubarmenuMenuAdd("UserMenuBar", "SubMenu", "SubMenu",
 NULL, PRO_B_TRUE, MsgFile);
 //设置菜单按钮的动作函数
 ProCmdActionAdd("
  ushButtonAct1",(uiCmdCmdActFn)Duangai1Fn, uiCmdPrioDefault,UsrAccessDefault,
 PRO_B_TRUE,PRO_B_TRUE,&
  ushButton_cmd_id1); //添加菜单按钮
 ProMenubarmenuPushbuttonAdd("SubMenu", "
  ushButton1", "PushButton1", "Adding a push button to the ProE menu bar", NULL,
 PRO_B_TRUE, PushButton_cmd_id1, MsgFile);
 //设置菜单按钮的动作函数
 ProCmdActionAdd("PushButtonAct2",(uiCmdCmdActFn)Duangai2Fn,
 uiCmdPrioDefault,UsrAccessDefault,
 PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id2);
 //添加菜单按钮
 ProMenubarmenuPushbuttonAdd("SubMenu","PushButton2","PushButton2",
 "Adding another push button to the ProE menu bar",NULL,
 PRO_B_TRUE,PushButton_cmd_id2, MsgFile);
 //设置菜单按钮的动作函数
 ProCmdActionAdd("PushButtonAct3",(uiCmdCmdActFn)Duangai3Fn,
 uiCmdPrioDefault,UsrAccessDefault,
 PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id3);
 //添加菜单按钮
 ProMenubarmenuPushbuttonAdd("SubMenu","PushButton3","PushButton3",
 "Adding the third push button to the ProE menu bar",NULL,
 PRO_B_TRUE, PushButton_cmd_id3, MsgFile);
 //设置菜单按钮的动作函数
 ProCmdActionAdd("PushButtonAct4",(uiCmdCmdActFn)Duangai4Fn,
 uiCmdPrioDefault,UsrAccessDefault,
 PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id4);
 //添加菜单按钮
 ProMenubarmenuPushbuttonAdd("SubMenu","PushButton4", "PushButton4",
 "Adding the forth push button to the ProE menu bar", NULL,
 PRO_B_TRUE, PushButton_cmd_id4, MsgFile);
 return status;
 }
 /*=========================================================*\
 FUNCTION: user_terminate()
 \*=========================================================*/
 extern "C" void user_terminate()
 {
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 }
 /*=========================================================*\
 FUNCTION: AccessAvailable (菜单项的访问权限设置:可选)
 \*=========================================================*/
 static uiCmdAccessState AccessAvailable (uiCmdAccessMode access_mode)
 {
 return (ACCESS_AVAILABLE);
 
 }
 错误
 1>Test_wchar_t.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Duangai4Fn(void)" (?Duangai4Fn@@YAXXZ),该符号在函数 _user_initialize 中被引用
 1>Test_wchar_t.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Duangai3Fn(void)" (?Duangai3Fn@@YAXXZ),该符号在函数 _user_initialize 中被引用
 1>Test_wchar_t.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Duangai2Fn(void)" (?Duangai2Fn@@YAXXZ),该符号在函数 _user_initialize 中被引用
 1>Test_wchar_t.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Duangai1Fn(void)" (?Duangai1Fn@@YAXXZ),该符号在函数 _user_initialize 中被引用
 1>Debug/Test_wchar_t.dll : warning LNK4088: 因 /FORCE 选项生成了映像;映像可能不能运行
 1>LIBC.lib(crt0init.obj) : warning LNK4254: 节“.CRT”(40000040)合并到具有不同属性的“.data”(C0000040)
 1>LIBC.lib(crt0init.obj) : warning LNK4253: 节“.CRT”未合并到“.data”;已合并到“.rdata”
 1>生成日志保存在“file://c:\Users\song\Desktop\Test_wchar_t\Debug\BuildLog.htm”
 1>Test_wchar_t - 4 个错误,17 个警告
 ========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
 
 
 
 
 
 为什么会这样的 请高手指点
 | 
 |