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

Cannot create automation object - lotusscript
DllImport is not found C++
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

Categories

HOME
service-worker
developer-tools
string
webdriver
jmx
3d
solaris
sublimetext
yandex
telegram-bot
square
onclick
mapbox
google-admin-sdk
barcode
qpython
mod-security
project-intu
datastage
mongodb-csharp
internationalization
esoteric-languages
asp.net-core-webapi
rubymotion
jquery-ias
backpack-for-laravel
systemtime
joptionpane
epsilon
comparator
dapper-extensions
tiki-wiki
moses
ms-access-web-app
firebase-analytics
calculation
corenlp-server
recurring-events
zend-debugger
sql-server-2000
database-comparison
lint
playframework-2.1
graphhopper
password-protection
loading
news
signals-slots
ogc
magento-1.9.3
watchface
branching-and-merging
naming
placeholder
berkeley-db-je
stylecop
uiimage
dapper-simplecrud
monkey-testing
httrack
yii2-api
launchctl
mongotemplate
corruption
context-sensitive-grammar
subnet
er-diagram
monkey
choice
change-tracking
omxplayer
eigenvector
appscale
lua-telegram-bot
deep
cda
fuzzywuzzy
beanstalk
halcon
grass
avisynth
computer-architecture
jdi
ocra
cwrsync
android-broadcast
appserver
cfcache
getopt
openargs
artemis
mongohq
cnf
nevron
codebase
timertask
easyb
application-verifier
sifr
duplex
appliance
pnrp

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