OpenVMS (VAX) FORTRAN子例程可以传递a character*(*)
subroutine forsub (in)
character*(*) in
type *, in
return
end从C函数:
#include<stdio.h>
#include <descrip.h>
extern void forsub();
main()
{
auto $DESCRIPTOR(in_string, "VMS pass from c to fortran.");
forsub(&in_string);
}OpenVMS (VAX) FORTRAN函数如何返回a character*(*)
character*(*) function forfunc (in)
character*(*) in
forfunc = in
return
end在C代码中处理:
#include<stdio.h>
#include <descrip.h>
extern ?????? forfunc();
main()
{
auto $DESCRIPTOR(in_string, "VMS fortran function return to c.");
??????? = forfunc(&in_string);
}发布于 2014-12-17 19:10:00
这个(旧的?) C用户指南中的示例3-5可能解释了如何做到这一点:您需要前面提到的隐藏参数。一个例子是:
#include <stdio.h>
#include <descrip.h>
extern void forfunc();
main()
{
auto $DESCRIPTOR(in_string, "VMS fortran function return to c.");
char buffer[64];
struct dsc$descriptor_s out_string = {
sizeof buffer, DSC$K_DTYPE_T, DSC$K_CLASS_S, buffer};
forfunc (&out_string, &in_string);
printf ("%.*s\n", out_string.dsc$w_length, out_string.dsc$a_pointer);
}发布于 2014-12-17 14:36:01
来自数字Visual版本的 V6.0A帮助:
使用语法字符*(*)返回字符串的Fortran函数将隐藏的字符串参数和字符串的地址放在参数列表的开头。
实现这样一个Fortran函数调用的C函数必须显式声明这个隐藏的字符串参数,并使用它返回一个值。C返回类型应该是无效的。但是,您更有可能通过不使用字符串返回函数来避免错误。尽可能使用子程序或将字符串放置到模块或全局变量中。
https://stackoverflow.com/questions/27516711
复制相似问题