title image


Smiley Re: Speicher reservieren für void pointers
Nun ja die ganze Sache ist ein wenig komplizierter!



Das Problem ist das ich die C++ Dll´s erst zur Laufzeit des Programms komopilieren kann. Der Grund ist es ist eine Anwendung mit der man verschiede Geräte ansteuern soll. Das Problem ist ich aber laufend neue Geräte kaufe und der Sinn ist nun immer die eine Dll zu programmieren für ein Gerät und diese dann in die Anwendung einzuspeisen! (ist das verständlich?)



Das Problem habe ich nun so gelöst:



Im C# Projekt:



AppDomain currentDomain;



AssemblyName myAssemblyName_SETVALUE;

AssemblyBuilder OOFAssembly_SETVALUE=null;

ModuleBuilder OOFModule_SETVALUE=null;





MethodBuilder SetValueMethod;

TypeBuilder OOFType_SETVALUE;





unsafe delegate ERRORC SetValueDelg(Int32 devHandle, PARAMID iValueID, void* szValue);





SetValueDelg setValue;



myAssemblyName_SETVALUE = new AssemblyName();

myAssemblyName_SETVALUE.Name = "OOF-Assembly_SETVALUE";





OOFAssembly_SETVALUE = currentDomain.DefineDynamicAssembly

(

myAssemblyName_SETVALUE,

AssemblyBuilderAccess.Run

);



OOFModule_SETVALUE = OOFAssembly_SETVALUE.DefineDynamicModule("OOF-Module_SETVALUE");



OOFType_SETVALUE = OOFModule.DefineType("OOFType_SETVALUE");







Type[] args11 = new Type[]

{

typeof(Int32),

typeof(PARAMID),

typeof(void*)

};



SetValueMethod = OOFType_SETVALUE.DefinePInvokeMethod(

"setValue",

dllName, // TODO: dynamisch übergeben

MethodAttributes.Public|MethodAttributes.Static|MethodAttributes.PinvokeImpl,

CallingConventions.Standard,

typeof(ERRORC),

args11,

CallingConvention.Winapi,

CharSet.Ansi);



SetValueMethod.SetImplementationFlags(MethodImplAttributes.PreserveSig);



setValue = (SetValueDelg)Delegate.CreateDelegate(

typeof(SetValueDelg),

OOFType_SETVALUE.CreateType(),

"setValue");





public unsafe ERRORC SetValue(Int32 devHandle, PARAMID iValueID, void* szValue)

{

return setValue (devHandle, iValueID, szValue);

}





So das Problem ist wenn ich nun die Funktion versuche aufzurufen muss ich ja die Parameter ( devHandle, ivalueID(eine Struktur) und szValue) deklarieren - das Problem habe ich nun beim dem Parameter szValue - was tu ich da?!?



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: