天天看點

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

單擊【确定】,然後在彈出的對話框中單擊【下一步 >】

DLL類型:使用共享 MFC DLL單擊【确定】,然後在彈出的對話框中單擊【下一步 >】

DLL類型:使用共享 MFC DLL單擊【确定】,然後在彈出的對話框中單擊【下一步 >】

DLL類型:使用共享 MFC DLL

Pro/TOOLKIT是Pro/ENGINEER的一個應用程式接口(API),其程式設計語言是C 語言,它可以對Pro/ENGINEER進行功能擴充,滿足PTC客戶的特定需求。

Pro/TOOLKIT 是Pro/ENGINEER 軟體系統自帶的二次開發子產品,可以直接通路Pro/ENGINEER 軟體的最底層資料庫資源,它幾乎能夠通路所有Pro/ENGINEER 的資源,可以說這是進行Pro/ENGINEER 二次開發最根本的方法。使用Pro/TOOLKIT進行二次開發,我們可以拓展Pro/ENGINEER的現有功能,定制企業需要的使用特性。

前言:

本教程采用VS2008 + Pro/E Wildfire5.0來講解怎樣開發Pro/TOOLKIT應用程式。

開發Pro/TOOLKIT應用程式時,Pro/E和Visual Studio的版本需對應,否則很難搭建開發環境,其對應關系如下:

* Wildfire 4.0 <> VS2008

* Wildfire 5.0 <> VS2008

* Creo 1.0 <> VS2010

* Creo 2.0 <> VS2010

本教程所述的方法完全适用于Wildfire4.0 + VS2008、Creo1.0 + VS2010、Creo2.0 + VS2010。

一、準備 1.

Pro/TOOLKIT在安裝Pro/E時,預設是不安裝Pro/TOOLKIT的,必須選中【API工具包】節點下的Pro/TOOLKIT選項。

可以通過運作:[Pro/E安裝目錄]/bin/ptcsetup.bat 檢視有無安裝Pro/TOOLKIT。

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
2.

VS2008最好安裝下VS2008 SP1更新檔,否則編譯Debug版本時常會報錯。

如果你需要開發64位的Pro/TOOLKIT程式,請確定安裝X64 Compilers and Tools,如下圖所示:

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
二、建立工程
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

點選【檔案】->【建立】->【項目】菜單指令,建立MFC DLL工程。

輸入工程名稱:test_wf5。

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

單擊【确定】,然後在彈出的對話框中單擊【下一步 >】

DLL類型:使用共享 MFC DLL

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

單擊【完成】完成建立工程。

三、配置工程屬性
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
1.

新增64位編譯平台

注意:如果隻編譯32位程式,請跳過此步驟。

單擊【生成】->【配置管理器】菜單指令,然後依照下圖操作。

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

如果沒有x64選項,那說明安裝VS2008時,沒有安裝X64 Compilers and Tools,重新安

裝此選項即可。

2.

新增頭檔案路徑

單擊【項目】->【屬性】菜單指令,添加如下頭檔案路徑。

【Pro/E安裝目錄】prodevelopincludes

【Pro/E安裝目錄】protoolkitincludes

注意:請先選擇平台是Win32還是x64。

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
3.

新增庫檔案路徑

32位:

【Pro/E安裝目錄】prodevelopi486_ntobj

【Pro/E安裝目錄】protoolkiti486_ntobj

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

64位:

【Pro/E安裝目錄】prodevelopx86e_win64obj

【Pro/E安裝目錄】protoolkitx86e_win64obj

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
4.

添加附加依賴項

mpr.lib

wsock32.lib

psapi.lib

protk_dllmd.lib

prodev_dllmd.lib

netapi32.lib

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
5.

設定工程字元集

推薦優先采用Unicode。

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)
四、添加Pro/TOOLKIT代碼
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

在test_wf5.cpp檔案的最後添加以下Pro/TOOLKIT代碼。

該段代碼的功能是:

在Pro/E的【幫助】菜單後新增一個菜單【TestMenu】,然後在【TestMenu】下新增兩個菜單項【Test】和【ShowCurrModelName】。分别實作彈出測試對話框和擷取目前模型的名稱并彈窗顯示。

注意:先隻要大體了解代碼的整體思路即可,本教程會在第三篇:手把手教你開發Pro/TOOLKIT應用程式(三) 中具體闡明代碼的所有細節,在學習完本篇和第二篇後,再去學習第三篇會比較好。

// 包含常用頭檔案

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

// 函數聲明

uiCmdAccessState TestAccess(uiCmdAccessMode access_mode);

uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode);

int Test(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data);

int ShowCurrModelName(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data);

// Pro/TOOLKIT入口函數

extern "C" int user_initialize()

{

ProError err;

// 資訊檔案名稱

ProFamilyName MsgFile;

ProStringToWstring(MsgFile, "Test_Msg.txt");

// 添加菜單:TestMenu

err = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE, MsgFile);

// 添加指令和菜單項

// 測試指令

uiCmdCmdId cmd_id1;

err = ProCmdActionAdd("Test", Test, uiCmdPrioDefault, TestAccess,

PRO_B_FALSE, PRO_B_FALSE, &cmd_id1);

err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test", "Test", "Test_Help",

NULL, PRO_B_TRUE, cmd_id1, MsgFile);

// 顯示并輸出目前模型的名稱

uiCmdCmdId cmd_id2;

err = ProCmdActionAdd("ShowCurrModelName", ShowCurrModelName, uiCmdPrioDefault,

ShowCurrModelName_Access,

PRO_B_FALSE, PRO_B_FALSE, &cmd_id2);

err = ProMenubarmenuPushbuttonAdd("TestMenu", "ShowCurrModelName", "ShowCurrModelName",

"ShowCurrModelName_Help", NULL, PRO_B_TRUE, cmd_id2, MsgFile);

return 0;

}

// Pro/TOOLKIT結束時調用的函數

extern "C" void user_terminate()

{

}

// 測試指令響應函數

int Test(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data)

{

AfxMessageBox(_T("Just For Test"));

return 0;

}

// 指令:擷取目前模型的名稱并顯示

int ShowCurrModelName(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data)

{

ProError err;

// 擷取目前模型

ProMdl mdl;

err = ProMdlCurrentGet(&mdl);

if (PRO_TK_NO_ERROR != err)

{

return -1;

}

// 擷取目前模型名稱并顯示

ProName name;

err = ProMdlNameGet(mdl, name);

MessageBoxW(NULL, name, L"wf5 test", MB_OK);

return 0;

}

// 測試指令 菜單權限函數

// 任何情況下菜單都有效

uiCmdAccessState TestAccess(uiCmdAccessMode access_mode)

{

return ACCESS_AVAILABLE;

}

// 擷取目前模型名稱并顯示 菜單權限函數

// 隻有在目前打開的模型為PART檔,ASM檔或Drawing檔時菜單才有效

uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode)

{

ProError err;

ProMode mode;

err = ProModeCurrentGet(&mode);

if (PRO_TK_NO_ERROR != err)

{

return ACCESS_UNAVAILABLE;

}

if (mode == PRO_MODE_PART

|| mode == PRO_MODE_ASSEMBLY

|| mode == PRO_MODE_DRAWING)

{

return ACCESS_AVAILABLE;

}

else

{

return ACCESS_UNAVAILABLE;

}

}

代碼說明:

1. user_initialize()為Pro/TOOLKIT應用程式的入口函數,每個Pro/TOOLKIT程式在被Pro/E加載時,首先執行此函數。

2. user_terminate()是Pro/TOOLKIT程式被Pro/E解除安裝時執行的函數。

3. ProMenubarMenuAdd為Pro/TOOLKIT程式添加菜單。

4. ProCmdActionAdd為Pro/TOOLKIT程式添加一個指令,一般在添加菜單項時會将指令和菜單項關聯,這樣在單擊菜單項時,就會執行對應的指令。

5. ProMenubarmenuPushbuttonAdd為菜單添加菜單項。

6. 以上代碼添加了兩個指令:

test — 直接彈出測試對話框。

ShowCurrModelName — 擷取目前模型的名稱并顯示。

五、編譯程式
7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

選擇需要編譯Win32還是x64版本,以及Debug還是Release版本。

7z.exe不是有效的win32應用程式_教你開發Pro/TOOLKIT應用程式(一)

單擊【生成】->【生成解決方案】即可編譯生成DLL檔案:test_wf5.dll。

注意:如果你的VS2008沒有安裝SP1更新檔,編譯Debug版本時常會報錯,即使編譯成功,Pro/E也無法加載生成的test_wf5.dll。