Sto cercando di trovare un modo per aggiungere codice alle funzioni generate da swig. Ho usato typemap per estendere le classi, ma non riesco a trovare nulla nella documentazione sull'estensione di funzioni specifiche.Aggiungere codice alla classe generata automaticamente in SWIG
Dato il seguente file di interfaccia sorso:
%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"
ricevo il seguente codice 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(...);
}
...
}
vorrei aggiungere del codice al Processo di funzioni, questo codice è una chiamata a SetDllDirectory(Path)
che carica la DLL corretta in base al tipo di piattaforma. Questo deve accadere all'interno della chiamata Process()
.
Qualsiasi aiuto è molto apprezzato!
Mai usato lo swig (e basato su quello che ho cercato su google) sembra che si voglia iniettare codice specifico C# ('SetDllDirectory()') durante la traduzione dal file sorgente C++ preesistente. Se è giusto, allora penso che devi riorganizzare il codice C++ per adattarlo all'iniezione. ESEMPIO Creazione di una chiamata di una funzione virtuale stub nel codice C++ 'Process()' che è possibile sovrascrivere successivamente una volta che si è nel realm C#. –
possibile duplicato di [È possibile aggiungere codice a un metodo esistente quando si usa Swig per costruire un wrapper C# per il codice C++?] (Http://stackoverflow.com/questions/11286913/is-it-possible-to-add -code-to-an-existing-method-when-using-swig-to-build-ac-sh) – cdiggins
@PeterM Questo è il tipo di approccio che stavo pensando, ma non riuscivo a trovare un modo per farlo funzionare davvero . Flexo ha dato un modo alternativo per iniettare codice C# direttamente da provare. –