如何间接调用C函数

时间:2014-01-27 09:36:58

标签: c++ c scripting

我们假设我有以下功能:

int func(int a, char* b, float c)
{
     return 42;
} 

如果有可能在没有:

的情况下调用此函数,我很好奇
  • 明确地调用它(func(1, "abc", 2.4)
  • 创建一个指向它的函数指针,然后通过函数指针调用它。

该函数是用C(或C ++)编写的,可能位于库(Windows上的DLL)或当前应用程序中编译的某个位置。现在让我们假设没有名称错位问题。

但是,我知道以下内容:

  • 功能名称。
  • 作为基于文字的输入的参数数量和类型(例如“int”,“char*”,“float”。
  • 其返回类型

我对任何建议持开放态度,但我有点害怕某些较低级别的装配黑客,因为我希望它尽可能便携。

我更喜欢C解决方案,我想避免boost::bind ......

修改 - 一些澄清......

“调用”“函数”是脚本语言的编译库(DLL)。它加载脚本语言(源文件),它具有“绑定”到外部“函数”(我试图调用的那些),当它在脚本语言中遇到“调用这个外部函数”时,它试图调用那个外部函数可能在DLL ...或实际加载脚本语言的DLL的应用程序...

1 个答案:

答案 0 :(得分:0)

为了能够调用参数类型在编译时不明确的函数,我担心你不会说“低级程序集黑客”。

如果x86或AMD64以外的体系结构的可移植性不相关,请查看at this wonderful library。它允许在运行时以特定于操作系统的非特定方式生成本机字节码,这应该是满足您愿望的最简单方法。

它仍处于测试阶段,但我现在已经使用了一段时间而没有遇到任何问题。