用 FORTRAN 编写 DLL,导出 subroutine,可以在别的编程语言中进行调用,很是方便。不过,遇到一些问题会让人恼火,特在这里记录一下。
1. 导出声明,子程序调用
导出的话,只要作如下声明即可。名称必须与子程序名称相同,否则就找不到了。调用的时候,一律使用大写。
C 语言中使用需要先声明函数原型,可以这么写
2. 参数传递
2.1 普通数据类型
2.2 数组
2.3 动态或不定长的数组
2.4 结构体
3. 错误语句
切忌使用 stop,否则会出错。
错误指向
1. 导出声明,子程序调用
导出的话,只要作如下声明即可。名称必须与子程序名称相同,否则就找不到了。调用的时候,一律使用大写。
- !DEC$ ATTRIBUTES DLLEXPORT :: fortfunc
- // For DLL function import.
- #define __DLLIMPORT__ __declspec(dllimport)
- // Compatible for C
- #ifdef __cplusplus
- extern "C" {
- #endif
- __DLLIMPORT__ void FORTFUNC(int *, float *);
- // __DLLIMPORT__ void FORTFUNC(int &, float &);
- // Compatible for C
- #ifdef __cplusplus
- }
- #endif
2. 参数传递
2.1 普通数据类型
2.2 数组
2.3 动态或不定长的数组
2.4 结构体
3. 错误语句
切忌使用 stop,否则会出错。
-
STOP
- inline void* CThreadSlotData::GetThreadValue(int nSlot)
- {
- EnterCriticalSection(&m_sect);
- ASSERT(nSlot != 0 && nSlot < m_nMax);
- ASSERT(m_pSlotData != NULL);
- ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
- ASSERT(m_tlsIndex != (DWORD)-1);
- ...
- }