電腦dll文件打開方式:dll文件打開軟體

前提

本文是C++開發高級方向,想學DLL和插件架構的朋友,對PS操作有思想的朋友,適合深度閱讀本文,普通編程愛好者加深下程序入口形式的理解也好。謝謝關注。

1、開發前的準備:

首先去Adobe官方網站下載相應的開發包,我本地安裝的Photoshop CS5,所以安裝的這個相應版本的。

http://www.adobe.com/devnet/photoshop/sdk.html
這裡我選擇的是Windows平台。

VC++開發Photoshop插件DLL

2、文件解壓詳解:

下載的zip,可以隨意解壓到你的本地目錄,然后里面有個pluginsdk插件sdk目錄,看到裡面有3個子文件夾:

VC++開發Photoshop插件DLL

documentation:英文幫助文檔;
photoshopapi:API庫,開發需要調用到的庫;
samplecode:樣常式序,裡面的例子可以隨意修改或參考作為你開發的模版。

3、打開samplecode,可以看到各種分類文件夾,對應不同的插件功能

其中Output文件夾是用來當作編譯輸出目錄的,入門首先需要學習兩個插件:getter 和 listener,他們在samplecodeautomation目錄下。

4、getter插件

打開samplecodeautomationgetterwingetter.sln,編譯生成插件,放到PS插件目錄下試下(你也可以將Output里插件目錄設置為PS的增效工具目錄),運行PS->文件->自動->getter,然後你會發現桌面上多了個getter.log,該插件的主要目的就是把你當前在PS里打開的文件、圖層信息及函數調用方法輸出到log里去,所以當你不知道如何獲取某個信息時,查找getter.log里對應的函數。

5、listener插件:

該插件的作用是監聽PS里的大部分操作和事件的函數調用過程,並輸出到桌面上的listerner.log里,比如你要複製剪切某一圖層,而且不知道如何用函數實現它的時候,先使用listener插件,打開PS對圖層進行一次複製剪切操作,然後打開listener.log,代碼就在那。

6、其它的一些插件

可以根據英文名大概理解其意思。

7、插件類型

Photoshop支持以下四種插件:
在Windows中,插件文件必須放置在特定的路徑中(如photoshopplugins)。
Acquire modules(擴展名8ba)實現在一個新窗口中打開一幅圖像,常用於掃描儀或視頻捕捉卡介面,讀取壓縮格式或系統不支持的文件,通過Acquire子菜單調用。
Export modules(擴展名.8be)實現圖像輸出,常用於控制特殊印表機或以非標準壓縮格式進行文件輸出,通過Export子菜單調用。
Format modules(擴展名.8bi)實現標準讀寫系統不支持的特殊文件格式,出現在Open…、Save As…等對話框的格式欄中。
Filter modules(擴展名.8bf)實施對當前圖像中的選定區域進行修改、潤色。這是大家最熟悉的部分,許多圖像效果便是出自這些模塊,通過Filter菜單調用。

8、框架:

每個插件里都有個AutoPluginMain,就是DLL入口,所謂的插件其實就是個DLL,找幾個插件,在AutoPluginMain里加個斷點,跟蹤一下,看看這些插件都幹了些什麼。
有些插件自帶彈框界面,可以用資源管理器編輯,用DialogBoxParam創建你自定義的界面,參考listener里的DoUI函數,makenew里的DoAbout等。
幾乎所有的API函數都會返回一個SPErr,表示函數調用正確與否。
所有的操作都要有個PIActionDescriptor,可以創建(sPSActionDescriptor->make())或獲取(PIUGetInfo())。sPSActionDescriptor是一個介面指針,可以從中獲取PIActionDescriptor信息(下面簡稱desc)以及執行一些操作。
sPSActionReference是一個介面指針,用來封裝一些信息到desc中,(下面簡稱refer)。
sPSActionControl是一個介面指針,用來Play各種事件。
如果要獲取信息,可以使用PIUGetInfo系列函數(在PIUGet.h中定義)。

9、例子插件Dissolve:

這裡挑選了SDK中的一個例子插件Dissolve。
DLLExport MACPASCAL void PluginMain(const int16 selector,
FilterRecordPtr filterRecord,
intptr_t * data,
int16 * result)
{
gFilterRecord = filterRecord;
gDataHandle = data;
gResult = result;

if (selector == filterSelectorAbout)
{
sSPBasic = ((AboutRecord*)gFilterRecord)->sSPBasic;
}
else
{
sSPBasic = gFilterRecord->sSPBasic;

if (gFilterRecord->bigDocumentData != NULL)
gFilterRecord->bigDocumentData->PluginUsing32BitCoordinates = true;
}

switch (selector)
{
case filterSelectorAbout:
DoAbout();
break;
case filterSelectorParameters:
DoParameters();
break;
case filterSelectorPrepare:
DoPrepare();
break;
case filterSelectorStart:
DoStart();
break;
case filterSelectorContinue:
DoContinue();
break;
case filterSelectorFinish:
DoFinish();
break;
default:
break;
}
if (selector != filterSelectorAbout)
UnlockHandles();
}
這裡展示的是部分代碼,插件的使用如下流程:

  1. 找到解壓後的文件,我這裡用VS2010打開Dissolve.sln文件,並運行
VC++開發Photoshop插件DLL

運行結束:

VC++開發Photoshop插件DLL

雖然成功生成了文件,可能會遇到找不到生成文件的問題。當時這個問題就出現了,不過不用擔心生成的.dll文件無法找的的原因是因為插件本身是有固定的擴展名,打開工程屬性頁可以看到輸出文件的擴展名為.8bf,這樣問題就好解決了,找到路徑下的Dissolve.8bf文件,複製到Photoshop安裝目錄下的Plug-insFile Formats文件夾,重新啟動Photoshop,會發現插件Dissolve已經加入到Photoshop中,可以愉快的使用了。這只是一個例子,其他很多的PS插件等著你的使用。

VC++開發Photoshop插件DLL
VC++開發Photoshop插件DLL
w

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/225813.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:46
下一篇 2024-12-09 14:46

相關推薦

發表回復

登錄後才能評論