Vad händer om du skriver:
Object o1 = "d_description"; Object o2 = username;
merak.SetProperty(o1, o2);
?
9 svar · 357 visningar · startad av aleborg
Jag har lagt till en referens till en COM-fil(dll-fil)
Sen försöker jag anropa den med:
MerakCOM.DomainObjectClass merak = new MerakCOM.DomainObjectClass();
merak.New(domain);
merak.SetProperty("d_description",username);
merak.Save();
men får bara felet:
System.Runtime.InteropServices.COMException (0xFFFFFFFF): Exception from HRESULT: 0xFFFFFFFF. at MerakCOM.DomainObjectClass.SetProperty(Object Command, Object Value) at Kontrollpanelen.classlib.Merak.CreateDomain()
jag frågade utvecklarna om detta och fick svaret:
MerakCOM.DomainObject merak = new MerakCOM.DomainObject(); Does not create an instance to the object. That's why it does not work for you. You have to use something else It has to be be a string input like:
merak = createobject("MerakCOM.DomainObject");
something like that.
It's not a library it's a COM
Han missade att jag programmerade i C# :OO
Hur gör man egentligen med COM-object?
Vad händer om du skriver:
Object o1 = "d_description"; Object o2 = username;
merak.SetProperty(o1, o2);
?
samma fel, fick det här nu av dom också:
I don't know C# but this what they say:
http://www.csharphelp.com/archives/archive190.html
You don't have the TLB file so it will not work for you. Your code does not create the instance to the COM object. The merak variable is NULL in your case. You have to work that out yourself....
jag hänger inte alls med :l
om jag kör TLBEXP.EXE får jag följande:
C:\Inetpub\wwwroot\Kontrollpanelen\bin>tlbexp Interop.MerakCOM.dll /out:MerakCOM
.tlb
Microsoft (R) .NET Framework Assembly to Type Library Converter 1.1.4322.573
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.TlbExp error: CLR-sammansättningen c:\inetpub\wwwroot\kontrollpanelen\bin\intero
p.merakcom.dll importerades från ett typbibliotek och kan inte exporteras igen t
ill ett typbibliotek. Kontrollera att typbiblioteket som sammansättningen import
erades från är registrerat.
Fick detta nu:
I still think it's not possible to do that. The "new" call is for classes creation. Not for COM object access.
Try to call merak->GetDomainCount() or anything. You will see it reports the error too. Merak is set to zero or fffffffff. Please if you find out how to create the instance let me know and I'll add it to the docs for other people. search the web for more info Cheers J
Så här tycker dom att man ska göra i PHP:
if ($com = new COM("MerakCOM.APIObject"))
{
$domain = $com->NewDomain("test.com");
$domain->SetProperty("d_description", "Description");
$domain->SetProperty("d_adminemail", "postmaster@test.com");
$domain->Save();
}
Jag har testat med APIObject och får samma fel.
Roliga är att om jag skriver:
MerakCOM.APIObject merak = new MerakCOM.APIObjectClass();
return merak.GetDomainCount().ToString();
då får jag ut antalet domäner :)
Och kör jag
MerakCOM.DomainObject merak = new MerakCOM.DomainObjectClass();
merak.Open("aleborg.se");
return merak.GetAccountList.ToString();
så får jag ut alla konton som finns på aleborg.se!
Verkar som om deras COM inte funkar som den ska!
Fick tips om det här: http://www.devarticles.com/c/a/C-Sharp/Using-Late-Bound-COM-Objects/3/
det ska tydligen lösa problemet, nu ska man bara löse det smidigt också :(
någon som vet hur man går till väga och vart man ska lägga
object myObject =Activator.CreateComInstanceFrom("Interop.MerakCOM.dll",
"MerakCOM.DomainObject").Unwrap();
Type myType = myObject.GetType();