Magic xpaからCDECL呼び出し規約でDLLを呼び出します。
|
|
CallDLL(モジュール名.関数名,引数型文字列,パラメータ1 ,パラメータ2 ,.)
|
|
|
|
DLL 内の指定した関数が返す値
戻り値だけは、Magic xpaに返されます。送られる項目に対する修正内容は、Magic xpaniには反映されません。
|
|
CallDLL('mydll.lmath','1L44',A,B,C)
|
|
対応するC関数は、long lmath(char action, long *a, long b)となり、DLL内の関数であるlmath からの戻り値が返ります。
|
|
CallDLL('mydll.add_str','AAA',A,B)
|
|
対応するC関数はchar *add_str(char *a, char *b)となり、DLL内の関数のadd_str からの戻り値が返ります。
|
|
-
多くのDLLは、ウインドウの「ハンドル値」を必要とします。これは、既存のウインドウごとの識別番号です。WinHWND()関数を使用することで、CallDLLにこの値を簡単に指定することができます。この関数は世代番号というパラメータを指定します。現在のタスクのウインドウのハンドル値を取得する場合は、常にWinHWND(0)を実行するだけです。
-
DLL関数が複雑な構造体を受けとることを期待しているのであれば、.NETコードを呼びだす方がより簡単です。たとえば、項目A を CallDLL('mydll.myfunc','AA',B) で更新する(A と B は文字型項目)代わりに、文字列バッファ(BStr)を受け取ったり返す関数をを考えます。以下のように、[コール.NET]処理コマンドでAを戻り値、Bをパラメータとすることができます。
using System;
using System.Runtime.InteropServices;
public static class Snippet
{
public static System.String func(ref System.String input)
{
return myfunc(input);
}
[DllImport("mydll.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.BStr)]
public static extern string myfunc([MarshalAs(UnmanagedType.BStr)] string Interface);
}
|
|