用 FORTRAN 编写 DLL 的问题

 用 FORTRAN 编写 DLL,导出 subroutine,可以在别的编程语言中进行调用,很是方便。不过,遇到一些问题会让人恼火,特在这里记录一下。

1. 导出声明,子程序调用

导出的话,只要作如下声明即可。 名称必须与子程序名称相同,否则就找不到了。调用的时候,一律使用大写。
  1.       !DEC$ ATTRIBUTES DLLEXPORT :: fortfunc
C 语言中使用需要先声明函数原型,可以这么写

  1. // For DLL function import. 
  2. #define __DLLIMPORT__  __declspec(dllimport)
  3. // Compatible for C
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. __DLLIMPORT__ void FORTFUNC(int *, float *);
  8. // __DLLIMPORT__ void FORTFUNC(int &, float &);
  9. // Compatible for C
  10. #ifdef __cplusplus
  11. }
  12. #endif


2. 参数传递

2.1 普通数据类型

2.2 数组

2.3 动态或不定长的数组

2.4 结构体

3. 错误语句

切忌使用 stop,否则会出错。
  1.        STOP
错误指向
  1. inline void* CThreadSlotData::GetThreadValue(int nSlot)
  2. {
  3.     EnterCriticalSection(&m_sect);
  4.     ASSERT(nSlot != 0 && nSlot < m_nMax);
  5.     ASSERT(m_pSlotData != NULL);
  6.     ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
  7.     ASSERT(m_tlsIndex != (DWORD)-1);
  8.     ...
  9. }

你可能感兴趣的:(编程,dll,语言,float,fortran,subroutine)