サードパーティ製DLL関数にアクセスする

宣言

Origin C関数は、C, C++, C++(.Net), C#または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サブフォルダにあります。

このセクションでは以下の項目について説明します