サードパーティ製DLL関数にアクセスする外部DLL、アクセス
宣言
Origin C関数は、C, C++, C++(.Net)C++(.Net) DLL, C#C# DLLまたはFortranコンパイラで作成した外部DLL の関数(Cリンケージのみ)を呼び出すことができます。これを行うには、関数のプロトタイプをヘッダファイルで提供し、どのDLLファイルが関数本体を含んでいるかをOrigin Cに宣言する必要があります。関数がmyFunc.hという名前のヘッダファイルで宣言されているとします。 これらの関数を呼び出す場合は、次のように、このファイルをOrigin Cファイルにインクルードします。
#include <myFunc.h> //\OriginC\System フォルダ内
#include "myFunc.h" //Origin Cコードと同じフォルダ内
#include "C:\myFile.h" //特定のパス内
DLLをロード
次に、Origin Cに関数本体をリンクする場所を指定し、外部DLL関数宣言の直前に、ヘッダーファイルmyFunc.h内に次のOrigin C pragmaディレクティブを含めます。DLLファイルはUserFunc.dllとします。
#pragma dll(UserFunc) //Origin exe フォルダ内
#pragma dll(C:\UserFunc) //特定パス内
#pragma dll(UserFunc, header) //.hファイルと同じフォルダ内
#pragma dll(UserFunc, system) //Windowsシステムフォルダ
Origin Cコンパイラは__cdecl(デフォルト)、__stdcall、__fastcallの3つの呼び出し方法をサポートしています。これらの呼び出し方法は、引数がスタックに渡される順序を決定するとともに、呼び出し元の関数と呼び出された外部関数のどちらがスタックから引数を消去するかを決定します。
Note: ファイル名に.dll拡張子を含める必要はありません。pragmaディレクティブの後のすべての関数宣言は、指定されたDLLから外部と見なされます。この前提は2番目の#pragma dll(filename)ディレクティブが現れるか、ファイルの最後に達するまで続きます。
バージョン管理
外部DLLを正常に動作させるには、32bitのDLLはOriginの32bit版で行う必要があります(64bit版も同様)。#ifdef_OWIN64は、現在のOriginが32/64bitどちらのバージョンであるか確認するため、ロードするDLLのバージョンを決定するために使用されます。例えば、
#ifdef _OWIN64
#pragma dll(UserFunc_64, header)
#else
#pragma dll(UserFunc, header)
#endif //_OWIN64
サンプル
外部DLLへのアクセス方法の良い例はSQLiteデータベースへのアクセスです。Origin CのC DLLまたはFortran DLLから関数を呼び出す方法を示すOriginサンプルプロジェクトがあります。これらの例はこのzipファイルの\Programming Guide\Calling Fortranおよび\Programming Guide\Calling C DLLサブフォルダにあります。
|