サードパーティ製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に関数本体をリンクする場所を通知し、ヘッダーファイル myFunc.h内の外部DLLを呼び出す直前に次の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コンパイラは次の3つの呼び出し方法をサポートしています。__cdecl(デフォルト), __stdcall, __fastcallです。これらの呼び出し方法は、引数がスタックに渡される順番を決定するだけでなく、呼び出している関数または呼び出された外部関数がスタックから引数を除去します。

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、Matlab、Fortran DLLからの関数の呼び出し方法を示すサンプルプロジェクトがあります。これらは、このZIPファイル\Programming Guide\Calling Fortran, \Programming Guide\Calling MATLAB DLL, \Programming Guide\Calling C DLLサブフォルダにあります。

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