dllimport


MarshalDirectiveException


I would like use unmanaged code from C in C#.
I built a DLL with C code with this functions:
struct GetPluginData
{
int data[22];
};
DLLEXPORT extern "C" __declspec (dllexport) GetPluginData GetDataArray(int number);
In C# I've got this code:
[StructLayoutAttribute(LayoutKind.Sequential, Pack=1)]
public unsafe struct GetPluginData
{
/// int[22]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 22, ArraySubType = UnmanagedType.I4)]
public int[] data;
}
[DllImport("RBRPlugin.dll", CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDataArray")]
[return: MarshalAs(UnmanagedType.Struct)]
public static extern GetPluginData GetDataArray(int number);
In button event or othe place code, I wrote this:
GetPluginData tes = GetDataArray(1);
And I'm getting the error: The type signature of this method is not PInvoke compatible.
I'm looking for information throught google, but no result found...
Thanks in advance!
Problems:
CallingConvertion.StdCall is incorrect, you didn't declare the function __stdcall in the C code. Make it CallingConvention.Cdecl.
Remove the [return: MarshalAs(UnmanagedType.Struct)] attribute, it is incorrect. UnmanagedType.Struct is rather unintuitive and not actually used on structs.
Remove the Pack attribute property, it is very unlikely to be correct albeit harmless here. Default packing in the C compiler is 8 unless you used #pragma pack or the /Zp compile option.
The pinvoke marshaller doesn't support returning a struct as a function return value that contains an embedded array. The source of the exception. Declare it as fixed int data[22] instead.
Here better, the correct code is:
[DllImport("RBRPlugin.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "GetDataArray")]
public static extern GetPluginData GetDataArray(int number);
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct GetPluginData
{
public unsafe fixed int data[22];
}
public GetPluginData temp1 = new GetPluginData();
private void button1_Click(object sender, EventArgs e)
{
GetPluginData test = GetDataArray(1);
temp1 = test;
unsafe
{
fixed (GetPluginData* p = &temp1)
{
p->data[0] = 1;
}
}
}

Related Links

Mangled member function name different during dllimport
how to use DllImport in metro-style app
Converting doc file to post script
How can I get a COM component which can be used on Windows phone 8 project with C#
Externs and DLL imports
Mixed native and managed code heap corruption
MarshalDirectiveException
call unmanaged C++ code from C# using pinvoke
Detecting DLL Code Splicing
WOW64 Redirection and LoadLibrary
Using C# dll in Windows phone 7
Python 2.5 Import dll AttributeError
Replacing the Import Table in PE file by standart LoadLibrary
Unresolved external symbol
Declare and <DllImport> in VB.NET have different results
how to import/export dll and use its function

Categories

HOME
phantom-dsl
scikit-learn
eslint
merge
css3
android-studio-2.2
case
swt
composite-primary-key
package
grafana
32bit-64bit
xcodebuild
libc
selectize.js
alpacajs
package.json
intershop
nim
swagger-2.0
rubymotion
squashfs
href
qliksense
windows-server-2003
fat
fable-f#
licensing
wcag
mobx
powershell-ise
rselenium
sendbird
vue-chartjs
reactjs.net
fiware-cygnus
openproject
node-mssql
projects-and-solutions
diacritics
news
doc
trigonometry
escpos
apollostack
angular-http
fwrite
sonarlint-eclipse
chai-as-promised
dbcontext
bluez
arq
subnet
spring-data-couchbase
rackspace-cloud
cd-burning
javafx-css
redbeard-ios
xdoclet
freepbx
cfchart
phpwebsocket
libav
halcon
qbxml
toast
mobiledoc-kit
ascii-art
dynamics-nav-2016
linklabel
sciruby
google-books
rubaxa-sortable
binomial-theorem
dock
apache-commons-daemon
avahi
ansi
jbake
encryption-asymmetric
ignite-ui
reflector
android-framework
extjs2
multiautocompletetextview
qscrollarea
observium
mantle
windows-98
device-width
web-notifications
vfs
wcf-configuration
httponly
failing-tests
koken
isa-swizzling
xui
nhprof
application-verifier
data-mapping
google-wave
windows-identity
fail-fast-fail-early
firefox-3
flvplayback
business-model
movieplayer
pbcopy

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App