C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Docuworksのプラグイン

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■83409 / inTopicNo.1)  Docuworksのプラグイン
  
□投稿者/ 初心者 (1回)-(2017/03/22(Wed) 08:47:06)

分類:[C/C++] 

Docuworksのプラグインを作成したく、Docuworksの開発キットをDLしました。
私のスキルとして、VB.Netは多少組めますが、キットのサンプルコードはC言語(C++かC#なのか分からず)で
ゼロ近い素人です。それでもプラグインソフトを作成したい気持ちが強く、何とかサンプルのエラーを取ることが
でき実行及び確認までこぎつけました。正しく表示されました。
ここから、ドキュファイルのハンドルを取得し、色々なことを実現したかったのですが、「XDW_OpenDocumentHandle」
を挿入した時点で、ビルド後のエラーメッセージにあるようなエラーが発生し、DLLが作成出来ません。

xdwapiwn.dllかxdwapi.dll辺りを参照させれば良いと思いますが、VB.Netの様にはいかず、C言語では違うのでしょうか?
Plgsmplプロパティページのダイアログから参照ー>新しい参照の追加と流れても、「項目が見つかりません」と表示されます。
参照が出来るようになればと思いますが、もう、皆目見当がつきません、どうか堪能な方お教えください。宜しくお願いします。

環境
DocuWorks Development Tool Kit 7.3 日本語版
VS Express2013 for DeskTop
Windows10

○サンプルコード(変更後のコード、変数やXDW_OpenDocumentHandle関数を追加)
Docu SDK\dwsdk730jpn\PLUGINSPI\PLGSMPL
// File: plgsmpl.c  −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "mpplugin.h"
#include "resource.h"
#include <xdw_api.h>
HINSTANCE myInst = NULL;
__declspec(dllexport) long __stdcall DllMain(HANDLE hInst, unsigned long reason,
void* lpReserved)
{
myInst = hInst;
return 1;
}

PLUGGEDIN_EXPORT(long) PLG_ExecuteCommand(PLUGGEDIN_STRUCT *ps)
{
/* このコマンド実行の途中、引数として渡されるDWファイルは開放されています。
読み書き可能でアクセスできます。
*/

char *buf = NULL;
char *tmp1 = NULL;
char *path = NULL;
int i = 0; //文書の個数
int j = 0; //各文書のページ番号
int result;
long last_page = 100;
XDW_DOCUMENT_HANDLE h = NULL;
XDW_OPEN_MODE_EX mode = { sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE };
int api_result = 0;
XDW_DOCUMENT_INFO info = { sizeof(XDW_DOCUMENT_INFO), 0, 0, 0 };
// XDW_GetPageInformation
XDW_PAGE_INFO infoP = { sizeof(XDW_PAGE_INFO), 0, 0, 0, 0, 0, 0, 0 };

buf = (char *)LocalAlloc(LMEM_FIXED, 32 + (MAX_PATH * ps->ps_nFiles));
tmp1 = (char *)LocalAlloc(LMEM_FIXED, MAX_PATH);
path = (char *)LocalAlloc(LMEM_FIXED, MAX_PATH);
strcpy(buf, "Arg files:");
for (i = 0; i< ps->ps_nFiles; i++){
//* strcat(buf, " ");
// _splitpath(ps->ps_pszFiles[i], tmp1, tmp1, path, tmp1);
// strc*/at(buf, path);
// 文書ハンドルを開く
api_result = XDW_OpenDocumentHandle(ps->ps_pszFiles[i], &h, (XDW_OPEN_MODE*)&mode);
if (api_result < 0) {
// print_error(api_result);
return 0;
}

}
MessageBox(GetFocus(), buf, "Plugin Sample", MB_OK);

LocalFree(buf);
LocalFree(tmp1);
LocalFree(path);
return 1;
}
以下省略

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○追加したDocuWorksの関数(XDW_OpenDocumentHandle)正確なものでなくこんな感じのコードを追加した:抜粋)
// 文書ハンドルを開く
XDW_DOCUMENT_HANDLE h = NULL;
XDW_OPEN_MODE_EX mode = {
sizeof(XDW_OPEN_MODE_EX), XDW_OPEN_UPDATE, XDW_AUTH_NODIALOGUE };
api_result = XDW_OpenDocumentHandle(in_path, &h, (XDW_OPEN_MODE*)&mode);
if (api_result < 0) {
print_error(api_result);
return 0;
}



−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
○ビルド後のエラーメッセージ
エラー 2 error LNK2019: 未解決の外部シンボル _XDW_OpenDocumentHandle@12 が関数 _PLG_ExecuteCommand@4 で参照されました。 D:\Visual Studio 2013\Docu SDK\dwsdk730jpn\PLUGINSPI\PLGSMPL\Plgsmpl.obj PLGSMPL
エラー 3 error LNK1120: 1 件の未解決の外部参照 D:\Visual Studio 2013\Docu SDK\dwsdk730jpn\PLUGINSPI\PLGSMPL\Debug\PLGSMPL.dll PLGSMPL

引用返信 編集キー/
■83411 / inTopicNo.2)  Re[1]: Docuworksのプラグイン
□投稿者/ 774RR (490回)-(2017/03/22(Wed) 09:25:43)
今出ているエラーは、関数 _XDW_OpenDocumentHandle@12 が無い、ということ。
オイラがちょいと調べた範囲では、この関数の本体は xdwapi.dll にあるのだろう。

native DLL の関数を Win32 の C/C++ から呼ぶ手段は2つ
・インポートライブラリをリンクする
・ LoadLibrary + GetProcAddress する

オイラは DocuWorks の開発ライブラリ所有してないので、上記どちらを使うのがよいかは判断できない。
DocuWorks の開発マニュアル中 XDW_OpenDocumentHandle 関数の解説ページ中に
「インポートライブラリ」の記述があればそれを「プロジェクトのプロパティ」で追加するとよい。
プロパティ→リンカ→入力→追加の依存ファイル、だったかな?

たとえば Microsoft のマニュアルなら
https://msdn.microsoft.com/ja-jp/library/cc428795.aspx
こんな感じで #include とインポートライブラリが書かれている。

後者は若干面倒なので、前者が「確実に使えない」のを確認してかられっつとらい。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ