Ik heb een programma dat werkt met onder andere scripts en COM-objecten.
Elke "module" implementeerd IDispatch, en communiceert met een aantal andere IDispatch interfaces.
Nu wil ik echter naast JScript en COM ook graag .NET talen als mogelijkheid hebben om modules te schrijven, dus ik ben op zoek naar een methode om een .NET dll te schrijven waaruit ik een IDispatch kan ontvangen, en die op zijn beurt ontvangen IDispatch's kan gebruiken.
Vanuit .NET IDispatch gebruiken lijkt vrij simpel door het gebruik van het "object" type en dan obj.GetType().InvokeMember te gebruiken.
Echter, om vanuit mijn C++ code een .NET class als COM object aanroepen lukt me niet
Wat ik tot nu toe heb is:
ICorRuntimeHost aanmaken met CorBindToRuntimeEx (lijkt te werken)
ICorRuntimeHost->Start (lijkt te werken)
ICorRuntimeHost->GetDefaultDomain + QueryInterface naar _AppDomain (geeft geen foutmeldingen).
_AppDomain->CreateInstanceFrom("DotNetTest.dll","DotNetTest.Class1"), geeft foutcode 0x80070002. (werkt ook)
Echter, als ik dan GetIDsFromNames probeer aan te roepen, krijg ik alleen DISPID_UNKNOWN
Ik heb al heel heel erg veel gezocht, en ik zie echt niet meer hoe het anders moet. Code zoals ik hierboven heb zie ik overal, alleen nergens met concrete voorbeelden van de .NET kant.
Wat ik tot nu toe als .NET kant aangehouden heb is:
Heeft iemand hier enige ervaring mee die me op weg kan helpen?
Ik zoek me nu al ruim 3 uur suf op google, en kom echt niet verder. Zelfs de MSDN documentatie is uitermate vaag over dit onderwerp
Elke "module" implementeerd IDispatch, en communiceert met een aantal andere IDispatch interfaces.
Nu wil ik echter naast JScript en COM ook graag .NET talen als mogelijkheid hebben om modules te schrijven, dus ik ben op zoek naar een methode om een .NET dll te schrijven waaruit ik een IDispatch kan ontvangen, en die op zijn beurt ontvangen IDispatch's kan gebruiken.
Vanuit .NET IDispatch gebruiken lijkt vrij simpel door het gebruik van het "object" type en dan obj.GetType().InvokeMember te gebruiken.
Echter, om vanuit mijn C++ code een .NET class als COM object aanroepen lukt me niet
Wat ik tot nu toe heb is:
ICorRuntimeHost aanmaken met CorBindToRuntimeEx (lijkt te werken)
ICorRuntimeHost->Start (lijkt te werken)
ICorRuntimeHost->GetDefaultDomain + QueryInterface naar _AppDomain (geeft geen foutmeldingen).
_AppDomain->CreateInstanceFrom("DotNetTest.dll","DotNetTest.Class1"), geeft foutcode 0x80070002. (werkt ook)
Echter, als ik dan GetIDsFromNames probeer aan te roepen, krijg ik alleen DISPID_UNKNOWN
Ik heb al heel heel erg veel gezocht, en ik zie echt niet meer hoe het anders moet. Code zoals ik hierboven heb zie ik overal, alleen nergens met concrete voorbeelden van de .NET kant.
Wat ik tot nu toe als .NET kant aangehouden heb is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| namespace DotNetTest
{
public class Class1
{
public void RegisterObject(string name, object obj)
{
if (name == "Console")
{
object[] args=new object [1];
args[0]="Test 1 2 3";
obj.GetType().InvokeMember("Error",BindingFlags.InvokeMethod,null,obj,args);
}
}
}
} |
Heeft iemand hier enige ervaring mee die me op weg kan helpen?
Ik zoek me nu al ruim 3 uur suf op google, en kom echt niet verder. Zelfs de MSDN documentatie is uitermate vaag over dit onderwerp
[img=http://www.web2messenger.com/smallstatus/w2m/theblasp.png]