Avatar billede md_craig Nybegynder
19. januar 2007 - 15:50 Der er 4 kommentarer og
1 løsning

VB Interop fra C#

Jeg er blevet nødsaget til at Interope en VB Dll for at løse en OPC Relateret opgave. men jeg står lige nu med et problem. (Det er dog slet ikke sikkert det er interopen der er problement)...

Jeg har ifl. API'et en metode:

GetItemProperties( ItemID As String, Count As Long, ByRef PropertyIDs() As Long, ByRef PropoertyValues() As Variant, ByRef Errors() As Long)

Da det er en registeret COM har den været nem nok at interope som sådan da VS2005 har gjort det meste af arbejdet for mig, men nu står jeg med en signatur på overstående metode som:

GetItemProperties(string ItemID, int Count, ref System.Array PropertyIDs, out System.Array PropertyValues, out System.Array Errors)

Det ser jo i bund og grund også fint ud... så jeg formoede at de ville være fint at give den Int og Object Arrays, men PT hænger jeg på en fejl :

System.ArgumentException : Value does not fall within the expected range

        static Array values = (Array) new object[ 1 ];
        static Array errors = (Array) new object[ 1 ];
        static Array ids = (Array) new int[ 1 ];


        private static string GetAccessebility( string str )
        {
            try
            {
                ids[ 0 ] = 5;
                server.GetItemProperties( str, 0, ref (ids as Array), out ( values as Array ), out ( errors as Array ) );
            }
            catch ( Exception ex )
            {
                Console.WriteLine( "{0} occured!: {1}", ex.GetType(), ex.Message );
                Console.WriteLine( ex.StackTrace );
                Console.ReadLine();
            }
           
            return "RW"; //Return Dummy until fixed
        }

Nogle der lige kan pointe mig i den rigtige retning...

Nogen med at Marshale til og fra Native types evt.?
Avatar billede md_craig Nybegynder
19. januar 2007 - 15:52 #1
Hov... fik mixed lidt med de gamle og nye casts der :P

                (ids as int[])[ 0 ] = 5;
                server.GetItemProperties( str, 0, ref ids, out values, out errors );

Men en detalje :P
Avatar billede arne_v Ekspert
19. januar 2007 - 20:22 #2
det er ikke fordi at Count skal angive antal argumenter i array'ene ?
Avatar billede md_craig Nybegynder
20. januar 2007 - 02:21 #3
Jow det troede jeg også... men har prøvet med både 0 og med antalet... i det eksempel de giver giver de en tom (VB Long), som de så bagefter bruger til at iterere...
Avatar billede md_craig Nybegynder
15. februar 2007 - 18:28 #4
Må vist hellere lukke her...

Ved ikke om det nogen siden kunne lade sig gøre som spørgsmålet stiller om men det endte med at jeg brugte en anden metode som tager en tom referance til et Array og en int (og lidt andre irrelevante ting) som kunne returnere de tilgængelige id'er...

Så brugte jeg den samme int der var kommet retur samt det array med mulige ID'er... i den overstående metode og så kunne jeg få det til at kører...

Det lidt triste ved det er at det bliver til 2 C# -> COM -> DCOM kald samt jeg så til sidst skulle løbe det returnerede igennem for at finde værdien på det ID jeg var interesseret i... meget omstændigt, især når det er en opgave som helst krævede lav tidskomplexitet samt lavt mem forbrug så er det i det hele taget lidt trist...

Men måske en forbedring i næste patch... :S
Avatar billede md_craig Nybegynder
15. februar 2007 - 18:29 #5
prøver igen o.O
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester