Gå til innhold

C#: [Løst]Struct, interop og synkronisering


Anbefalte innlegg

Folkens-....:

 

Jeg har et program i Clarion som har en datatype av typen GROUP. Ser f.eks. slik ut:

MyGroupType   GROUP, TYPE
Verdi1			LONG
		  END
MyGroup	   &MyGroupType

Så har jeg en prosedyre i Clarion som ser slik ut:

AssignGroup   procedure(LONG pAdresse)
  CODE
  MyGroup &= (pAdresse)

Kort forklart så betyr dette at jeg har en datatype (MyGroupType) og en referanse til denne datatypen slik at MyGroup nå er en referanse til hva som måtte komme igjennom pAdresse. Det betyr at jeg i Clarion kan kalle slik:

EnGruppe	  &MyGroupType
EnGruppe = new MyGroupType
EnGruppe.Verdi1 = 10

Såh over til problemet...

 

Jeg har i C# laget en Interop klasse som tar inn DLL'en som inneholder det over og har prototypet en struct slik:

[StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)]
public struct ClarionDataExchangeType
{
 public Int32 Verdi1;
}
public static ClarionDataExchangeType ClarionData = new ClarionDataExchangeType();

 

Så har jeg dratt inn den AssignGroup metoden inn i .NET slik:

[DLLImport("ClaNet", EntryPoint = "ASSIGNGROUP")]
public static extern void SetClarionGroup(ref ClarionDataExchangeType pClarionData);

Dette gjør at når jeg kaller metoden SetClarionGroup så får jeg en "transparent" versjon av struct/group - nesten...

 

Hvis jeg gjør endringer i verdiene på .NET siden så ser jeg dette både i .NET programmet og i Clarion programmet. Men når jeg endrer noe på Clarion siden så skjer det ingen ting. Virker som at denne greia gjør den ReadOnly eller noe slikt. Noen som vet en måte å omgå dette på?

Endret av HDSoftware
Lenke til kommentar
Videoannonse
Annonse

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...