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

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
HELP linking library in DLL project

Categories

HOME
service-worker
google-cloud-platform
solver
owl-carousel
ms-access-2016
zip
python-multithreading
jax-ws
character
barcode
google-schemas
resultset
supervisor
mongodb-csharp
gruntfile
azure-iot-hub
package.json
powershell-v5.0
forgot-password
digital-signature
asciidoctor-pdf
googlebot
imagemap
ember-cli
inno-download-plugin
pchart
tosca
mount
outliers
oculus
firebase-analytics
soot
complex-numbers
zend-debugger
testbed
instantiation
carriage-return
arduino-ide
sharepoint-workflow
openalpr
jpad
urlsession
spring-mvc-test
levenshtein-distance
rfc3339
jide
openal
builder
openrasta
geotiff
modelsim
boxing
android-testing
boo
sundials
mach-o
google-photos
javafx-css
testrail
flex-monkey
centrifuge
stream-processing
bizagi
aurora
hadoop-partitioning
phpwebsocket
jparsec
piracy-prevention
dynamics-nav-2016
opl
terracotta
intel-c++
doctype
rpart
ember-cli-rails
airbrake
node-serialport
jquery-forms-plugin
actionfilterattribute
mmwormhole
gamekit
ejb-2.x
nodelist
angular-gettext
sip-server
webfinger
linkedin-jsapi
jama
jqmodal
xml-dsig
draw2d-js
decoupling
websphere-esb
drupal-nodes
mysql-error-1044
android-icons
pagedown
wp7test
garbage
azman
ilasm
u2netdk
http-daemon
nstokenfield
django-piston
sqlobject
product-management
httpcookie
movieplayer
netbeans6.1

Resources

Database Users
RDBMS discuss
Database Dev&Adm
javascript
java
csharp
php
android
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App