当前位置: 首页 > 知识库问答 >
问题:

为什么我的swig生成的tcl代码在运行时缺少方法?

秦联
2023-03-14

我正在使用swig 4.0.2生成一个供tcl使用的包。

消息来源。i文件包含很多类和生成的_wrap。cpp文件包含了我所期望的所有类及其方法,并且一切编译正常,没有任何警告。

但是,对于至少一个类,当我从tcl脚本调用实例上的方法时,我会收到一个运行时错误,说该方法不存在。该错误还转储了该类的所有可用方法。我试图调用的方法以及其他一些方法不存在于该列表中。

Invalid method. Must be one of: configure cget -acquire -disown -delete ...

虽然缺少哪些方法是一致的,但列表中似乎没有不包含哪些方法的模式。

缺少的方法分散在声明的swig接口中。它们不在开头或结尾,也不在一个街区内。我看不到它们的名字和函数签名的模式。

发生错误时正在运行的函数是SWIG_Tcl_MethodCommand:一个由SWIG生成的函数。它负责按名称查找方法并打印出错误代码。

函数包装器都存在,并在类的swig_方法数组中引用。

我会想象,如果通过查找无法找到一个方法,那么它将是全部或全部。

有人知道我可以在哪里查找错误吗?恐怕我无法将其隔离到一个可以共享的小测试用例中。

我正在使用swig4.02,为tcl8生成代码并在c 14下编译。

共有1个答案

瞿文柏
2023-03-14

问题是由复制和粘贴代码引起的。

我正在处理的项目中存在第二个Swig包。它重新声明了相同的类接口,但缺少一些方法

如果我同步声明,那么一切都正常。

这就留下了一个问题:带有非同步swig接口(由swig1.0生成)的原始代码是如何工作的。

 类似资料:
  • 我正在使用SWIG生成一个围绕freetype的C包装。我的目标是为WinRT生成一个带有C接口的freetype DLL,该接口将在Windows Phone 8上运行,然而,生成的C包装似乎依赖于Tcl。由于我不需要Tcl绑定,而且WinRT默认情况下不提供Tcl,我想知道是否可以以某种方式关闭Tcl依赖项。我正在使用Visual Studio 2012编译生成的代码。 我查阅了文档,只找到了

  • 您将自动执行著名的歌曲“墙上的99瓶XXX”。你将打印这首歌所有99个诗句的歌词。用循环!如果你不知道歌词,用谷歌查一下。 该方案应: a.如果他们不到21岁,或者他们喜欢苏打水,那么歌词是“墙上有99瓶苏打水” B.如果他们超过21岁,那么是“99瓶啤酒” 您必须使用WHILE循环,并且counter变量必须是print语句的一部分! 所以第一节是: 99瓶苏打水挂在墙上 墙上有98瓶苏打水 最

  • 问题内容: 我使用XJC工具为XSD架构生成Java类。当我使用JAXB Marshaller将类编组为XML有效负载时,我在输出XML中缺少“ schemaLocation”参数,但在xsd文件中声明了此参数。如何在输出XML中强制执行“ schemaLocation”参数? 以下是用于代码生成的xsd模式文件的开头: 问候 问题答案: 试试这个:

  • 我正在尝试使用SWIG将旧的Tcl接口替换为C。下面是一个示例类: 这是使用它的标准方法: 但我想保留旧界面的简单性,它不使用”。我发现我可以做如下事情: 它看起来很简单,工作完美,但是,当然,我不能在用户脚本中使用定义。我不确定还能把它放在哪里。有办法把它放在. i文件中吗?

  • 它显示了以下错误:在Homepractice类中,Main方法必须返回void类型的值。gym,请将main方法定义为:public static void main(String[]args)

  • 问题内容: 我需要在运行时为方法生成代码。能够运行任意代码并具有文档字符串非常重要。 我想出了一个结合和的解决方案,这是一个虚拟的示例: 是否有更好/更安全/更惯用的方式获得相同的结果? 问题答案: 基于Theran的代码,但将其扩展为类的方法: 应该打印: