생성 된 함수에 코드를 추가하는 방법을 찾으려고합니다. 클래스를 확장하기 위해 typemaps를 사용했지만 문서에서 특정 함수를 확장하는 데 필요한 것을 찾을 수 없습니다. 나는 다음과 같은 C# 코드를 얻을 수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"
: 다음 꿀꺽 꿀꺽 인터페이스 파일을 감안할 때
는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(...);
}
...
}
내가 함수 프로세스에 몇 가지 코드를 추가하고 싶습니다,이 코드를 호출입니다 SetDllDirectory(Path)
은 플랫폼 유형에 따라 올바른 dll을로드합니다. 이 메시지는 Process()
호출 내에서 발생해야합니다.
도움을 주시면 대단히 감사하겠습니다.
swig (그리고 내가 방금 봤던 것을 기반으로)를 사용하지 않은 것은 기존 C++ 소스 파일에서 변환하는 동안 C# 특정 코드 ('SetDllDirectory()')를 삽입하려는 것으로 보입니다. 그것이 맞다면, 나는 그 주입을 수용하기 위해 C++ 코드를 재정렬해야한다고 생각한다. EG'Process()'C++ 코드에서 스텁 가상 함수 호출을 생성합니다. C++ 코드는 나중에 C# 영역에 있으면 재정의 할 수 있습니다. –
가능한 복제본 [Swig을 사용하여 C++ 코드 용 C# 래퍼를 작성할 때 기존 방법에 코드를 추가 할 수 있습니까?] (http://stackoverflow.com/questions/11286913/is-it-possible-to-add -code-to-an-existing-method-swig-to-build-ac-sh) – cdiggins
@PeterM 그건 내가 생각하고있는 접근 방식이지만 실제로 작동하게하는 방법을 찾지 못했다. . Flexo는 직접 시도 할 C# 코드를 직접 삽입하는 대체 방법을 제공합니다. –