C#のdllを呼び出せるように、C#のdllを参照した後、Plugin.cppの一部を以下のように書き換えました
PHiValue __stdcall sample01(DWORD param) {
PHiValue result;
ClassLibrary1::Class1::Method1();
result = nako_var_new(NULL);
hi_setStr(result¸ "abc"¸ sizeof("abc"));
return result;
}
NAKO_API(void) ImportNakoFunction(void) {
// ユーザー命令の追加
nako_addFunction("sample01"¸""¸ sample01¸ 0);
}
なでしこ側のソースは以下のようにして呼び出してみました
結果=sample01
結果を言う
これでダイアログボックスに「method1」が表示され、続いて「abc」が表示されればOKです。
しかし・・・結果は外部例外 E0434F4Dを出力してちゃんと動きませんでしたorz。この例外はtry...catchで掴もうとしても掴めません。どうも処理の関数(ここではsample01)に入った瞬間にエラーを返してしまうようです。ちなみにこのコードでググっても原因は理解できませんでした。ということで、クジラ飛行机氏(なでしこ作者)にメールで泣きつきました。
すると
vnako.exe と同じフォルダに配置したらエラー出ませんでした。たぶん、plug-ins フォルダにパスを通さない限り、DLLがもう一方を参照できなくなるのだと思います。
という返事が!まじで!?と思い試してみると・・・上手くいくじゃないですか!これでC#で作ったdllもなでしこで利用できるようになりました。