hi,
i have a c# interop that pass struct into c dll. for some reason the
data transfered into the c function is with incorrect order (meaning -
members of the struct get other struct values and other members get
zero)
can someone know how can i fix it?
thanks,
Guy 5 1898
<gu**********@googlemail.comwrote in message
news:11**********************@n76g2000hsh.googlegr oups.com...
i have a c# interop that pass struct into c dll. for some reason the
data transfered into the c function is with incorrect order (meaning -
members of the struct get other struct values and other members get
zero)
can someone know how can i fix it?
There is probably some difference in the way that C# and C are laying out
the structure, such as members that are not 32-bits long being aligned on
different boundaries. In C# you can apply to your struct the attributes
[StructLayout(...)] and [FieldOffset(...)] which let you fine-tune the
internal layout of the struct so that you can match the layout of the struct
in the dll.
On May 6, 1:03 pm, "Alberto Poblacion" <earthling-
quitaestoparacontes...@poblacion.orgwrote:
<guy.gorod...@googlemail.comwrote in message
news:11**********************@n76g2000hsh.googlegr oups.com...
i have a c# interop that pass struct into c dll. for some reason the
data transfered into the c function is with incorrect order (meaning -
members of the struct get other struct values and other members get
zero)
can someone know how can i fix it?
There is probably some difference in the way that C# and C are laying out
the structure, such as members that are not 32-bits long being aligned on
different boundaries. In C# you can apply to your struct the attributes
[StructLayout(...)] and [FieldOffset(...)] which let you fine-tune the
internal layout of the struct so that you can match the layout of the struct
in the dll.
i have used [StructLayout(LayoutKind.Sequential)] and it didn't
helped.
my struct contains 6 members: first two are enums and the other are
UINT32.
when i pass them into the c function the enums pass o.k but the other
members are shifted - 3rd and 4th get 0, 5th get the value the should
have been of the 3rd, and 6th get the value that should have been of
the 4th.
any suggestion?
thanks.
Guy
<gu**********@googlemail.comwrote in message
news:11**********************@p77g2000hsh.googlegr oups.com...
i have used [StructLayout(LayoutKind.Sequential)] and it didn't
helped.
[...]
any suggestion?
Instead of LayoutKind.Sequential, use LayoutKind.Explicit and then apply
to each member the attribute [FieldOffset(position)] to "move" each one to
the offset where it is expected by your dll.
<gu**********@googlemail.comwrote in message
news:11**********************@p77g2000hsh.googlegr oups.com...
On May 6, 1:03 pm, "Alberto Poblacion" <earthling-
quitaestoparacontes...@poblacion.orgwrote:
><guy.gorod...@googlemail.comwrote in message
news:11**********************@n76g2000hsh.googleg roups.com...
i have a c# interop that pass struct into c dll. for some reason the
data transfered into the c function is with incorrect order (meaning -
members of the struct get other struct values and other members get
zero)
can someone know how can i fix it?
There is probably some difference in the way that C# and C are laying out the structure, such as members that are not 32-bits long being aligned on different boundaries. In C# you can apply to your struct the attributes [StructLayout(...)] and [FieldOffset(...)] which let you fine-tune the internal layout of the struct so that you can match the layout of the struct in the dll.
i have used [StructLayout(LayoutKind.Sequential)] and it didn't
helped.
my struct contains 6 members: first two are enums and the other are
UINT32.
when i pass them into the c function the enums pass o.k but the other
members are shifted - 3rd and 4th get 0, 5th get the value the should
have been of the 3rd, and 6th get the value that should have been of
the 4th.
any suggestion?
Your StructLayout Pack isn't set to what you expect. The Framework is
adding padding between the enums and the UINT32s, that's what the zeros are
and that's why 3 and 4 seem to be in 5th and 6th position.
On May 7, 1:02 am, "John Vottero" <JVott...@mvpsi.comwrote:
<guy.gorod...@googlemail.comwrote in message
news:11**********************@p77g2000hsh.googlegr oups.com...
On May 6, 1:03 pm, "Alberto Poblacion" <earthling-
quitaestoparacontes...@poblacion.orgwrote:
<guy.gorod...@googlemail.comwrote in message
>news:11**********************@n76g2000hsh.googleg roups.com...
i have a c# interop that pass struct into c dll. for some reason the
data transfered into the c function is with incorrect order (meaning -
members of the struct get other struct values and other members get
zero)
can someone know how can i fix it?
There is probably some difference in the way that C# and C are laying
out
the structure, such as members that are not 32-bits long being aligned on
different boundaries. In C# you can apply to your struct the attributes
[StructLayout(...)] and [FieldOffset(...)] which let you fine-tune the
internal layout of the struct so that you can match the layout of the
struct
in the dll.
i have used [StructLayout(LayoutKind.Sequential)] and it didn't
helped.
my struct contains 6 members: first two are enums and the other are
UINT32.
when i pass them into the c function the enums pass o.k but the other
members are shifted - 3rd and 4th get 0, 5th get the value the should
have been of the 3rd, and 6th get the value that should have been of
the 4th.
any suggestion?
Your StructLayout Pack isn't set to what you expect. The Framework is
adding padding between the enums and the UINT32s, that's what the zeros are
and that's why 3 and 4 seem to be in 5th and 6th position.- Hide quoted text -
- Show quoted text -
i have found my problem, i have defined inside the c file by mistake
one of the members as INT8 instead of INT32
so that what cause me the shifting!
thanks you all, This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: wesley |
last post by:
Hi,
What's the reasoning of having struct in .Net? Since they hardly differ with
classes? Are there any advantages using struct instead of classes?
Thanks
|
by: Niyazi |
last post by:
Hi,
I have BIG question and I gues it is the BEST question.
I have a problem that I am guessing the best solution is to create some sort
..NET Services.
This Service(s) must check every...
|
by: Clunixchit |
last post by:
How can i read lines of a file and place each line read in an array?
for exemple;
array=line1
array=line2
...
|
by: Erialc Berts |
last post by:
Forgive me for being a C# newbie.
I have read all of the newsgroup posts, MSDN articles, and other websites on
interop and marshalling to send and receive a C struct as a parameter or
return...
|
by: Cybertof |
last post by:
Hello,
Is it possible to convert a VB6 Array of Struct
to
a C# Array Of Struct ?
The test context is a C# application calling a VB6 ActiveX DLL Function
using UDT (User Defined Type) and...
|
by: Russell Mangel |
last post by:
Sorry about the Cross-Post, I posted my question in the wrong group.
Hello,
What is the simplest way to create a dynamic collection (during run-time),
using basic C (Struct data types). Since...
|
by: =?Utf-8?B?VG9ub2ZpdA==?= |
last post by:
I've got the following umanaged code that I need to handle in C# code. The
data I read comes from an external device, by Read(ID, &data, REGLEN);
How should the code look for the structs in ...
|
by: Hypnotik |
last post by:
Hello everyone. I'm working on a program that crashes whenever I enter the value that is supposed to stop the program. The program takes in various pieces of info, has a struct and a class. The...
|
by: jacob navia |
last post by:
Abstract:
Continuing the discussion about abstract data types, in this
discussion group, a string collection data type is presented,
patterned after the collection in C# and similar languages...
|
by: DolphinDB |
last post by:
Tired of spending countless mintues downsampling your data? Look no further!
In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: ArrayDB |
last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
|
by: CloudSolutions |
last post by:
Introduction:
For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
|
by: Shællîpôpï 09 |
last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
|
by: af34tf |
last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome former...
| |