Chinaunix首页 | 论坛 | 博客
  • 博客访问: 274972
  • 博文数量: 47
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 385
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-26 08:59
文章分类

全部博文(47)

文章存档

2012年(1)

2011年(1)

2009年(23)

2008年(22)

我的朋友

分类:

2009-04-06 11:11:16

用 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. }
阅读(3407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~