【发布时间】:2014-11-17 16:04:52
【问题描述】:
我正在尝试找到一种将代码添加到 swig 生成函数的方法。我使用类型映射来扩展类,但在文档中找不到任何关于扩展特定功能的内容。
给定以下 swig 接口文件:
%module Test
%{
#include "example.h"
%}
%typemap(cscode) Example %{
bool 64bit = SizeOf(typeof(System.IntPtr)) == 8;
static string Path = 64bit ? "/...Path to 64 bit dll.../" :
"/...Path to 32 bit dll.../";
%}
%include "example.h"
我得到以下 C# 代码:
public class MyClass : global::System.IDisposable {
...
bool 64bit = SizeOf(typeof(System.IntPtr)) == 8;
static string Path = 64bit ? "/...Path to 64 bit dll.../" :
"/...Path to 32 bit dll.../";
...
public static SomeObject Process(...) { // Function defined in example.h
<- I would like to add some code here.
SomeObject ret = new SomeObject(...);
}
...
}
我想向函数 Process 添加一些代码,该代码是对 SetDllDirectory(Path) 的调用,它根据平台类型加载正确的 dll。这需要在 Process() 调用中进行。
非常感谢任何帮助!
【问题讨论】:
-
从未使用过 swig(根据我刚刚搜索的内容),您似乎想在从现有 C++ 源文件进行翻译期间注入 C# 特定代码 (
SetDllDirectory())。如果这是正确的,那么我认为您必须重新排列您的 C++ 代码以适应该注入。 EG 在Process()C++ 代码中创建一个存根虚函数调用,一旦进入 C# 领域,您就可以稍后覆盖它。 -
@PeterM 这就是我想的那种方法,但找不到真正让它发挥作用的方法。 Flexo 提供了一种直接注入 C# 代码的替代方法,我将尝试一下。