webForumDet fria alternativet

COM

9 svar · 357 visningar · startad av aleborg

aleborgMedlem sedan jan. 20012 962 inlägg
#1

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?

nikoMedlem sedan juni 20022 415 inlägg
#2

Vad händer om du skriver:

Object o1 = "d_description"; Object o2 = username;
merak.SetProperty(o1, o2);

?

aleborgMedlem sedan jan. 20012 962 inlägg
#3

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

aleborgMedlem sedan jan. 20012 962 inlägg
#4

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.

nikoMedlem sedan juni 20022 415 inlägg
#5

Jag förstår inte heller. Du har lagt till referensen till COM-dll:en VS.NET? Du kan steppa förbi de två första raderna? Felet kommer på SetProperty-raden? Isåf har ju instansen skapats och det verkar vara nåt problem med inparametrarna till SetProperty? Har du förtydligat det för dem?

aleborgMedlem sedan jan. 20012 962 inlägg
#6

Jag har lagt till den som referens i VS.NET och jag får upp allt innehåll i Intellisencen. Jag har gett dom det kompletta felmeddelandet.

aleborgMedlem sedan jan. 20012 962 inlägg
#7

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.

aleborgMedlem sedan jan. 20012 962 inlägg
#8

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!

aleborgMedlem sedan jan. 20012 962 inlägg
#9

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å :(

aleborgMedlem sedan jan. 20012 962 inlägg
#10

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();
369 ms totalt · 5 externa anrop · cache AV · v20260730165559-full.0b955084
0 ms — hämta statistik (cache)
122 ms — slå upp tråd (db)
0 ms — hämta forumlista (cache)
125 ms — hämta inlägg (db)
119 ms — hämta bilagor (db)