Моё меню Общее меню Сообщество Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > IT-индустрия > Софт > Программирование > .NET & ASP.NET
Сообщения за день Поиск
Знаете ли Вы, что ...
...нарушения правил форума наказываются. Старайтесь их не нарушать.
<< Предыдущий совет - Случайный совет - Следующий совет >>

.NET & ASP.NET Вопросы программирования .NET, ASP.NET, Web Services и других WEB-технологий .NET.


Ответить

 
Опции темы Опции просмотра
Старый 29.05.2009 18:06   #1  
Аватар для Nematjon
Оффлайн
-
Developer
Сообщений: 8
+ 0  0/0
– 0  0/0

Uzbekistan
Icon24 PInvoke problema (C#) !

u menya est struktura v C app .
typedef struct _Node_Ex
{
BOOL bFolder;
BOOL bHidden;

wchar_t wszName[256];
wchar_t wszFullPath[2048];

SYSTEMTIME stDateCreated;
SYSTEMTIME stDateModified;

int nCountOfChilds;

DWORD64 dwFileSize;
HTREEITEM hItem;


} Node_Ex;

i funksiya :
extern "C" __declspec(dllexport) Node_Ex GetNode_Ex(int n);
-----------------------------------

C# code :

[StructLayout(LayoutKind.Sequential,CharSet=CharSet .Unicode,Pack=1)]
public struct Node_Ex
{
public bool bFolder;
public bool bHidden;

[MarshalAsAttribute(UnmanagedType.LPWStr, SizeConst = 256)]
public string wszName;

[MarshalAsAttribute(UnmanagedType.LPWStr, SizeConst = 2048)]
public string wszFullPath;

public SYSTEMTIME stDateCreated;
public SYSTEMTIME stDateModified;

public int nCountOfChilds;

public int dwFileSize;
public HTREEITEM hItem; //IntPtr

};

[DllImport(DLLNAME)]
public static extern Node_Ex GetNode_Ex(int n);

kagda ya ispolzuyu etot funksiya , u menya oshibka vot tak

Method's type signature is not PInvoke compatible .

Kak reshit etogo problema ?
Spasiba .
Ответить 
Старый 29.05.2009 19:58   #2  
uParty Member Known ID Group
Аватар для DarkUser
Оффлайн
Служу Его Божественной Тени!
Сообщений: 1,671
+ 4,505  1,372/657
– 164  33/27

Uzbekistan
тут
что-то подобное обсуждалось...
__________________
Are you my mommy?
Ответить 
Старый 30.05.2009 10:01   #3  
Аватар для Nematjon
Оффлайн
-
Developer
Сообщений: 8
+ 0  0/0
– 0  0/0

Uzbekistan
Information ничего не нашел ?

ya iskal otvet etom voprose v google , no ничего не нашел !


drugie idea est ?
za ranie spasiba .
Ответить 
Старый 30.05.2009 11:54   #4  
Real ID Group
Аватар для Andrew Sklyarevsky
Оффлайн
Сообщений: 135
+ 22  63/50
– 1  0/0

UzbekistanОтправить сообщение для Andrew Sklyarevsky с помощью ICQLiveJournal
Возможно, необходимо поэкспериментировать с типами в C# варианте. Например, поле dwFileSize типа DWORD64 в C# объявлено как int, хотя скорее всего нужен long. (int - 32 бита). Так же не уверен о типе BOOL в C++ варианте. Возможно, соответствующие поля на C# нужно объявить, как int, т.к. насколько помню, BOOL в WinAPI объявлен как int. Не уверен, что можно напрямую превращать массив wchar_t в string. Возможно, нужно попробовать в C# объявить эти поля как массивы char[] или даже byte[]. Не совсем понятно и что такое SYSTEMTIME и чем он заменен на C#.
__________________
Веб-разработчик
Ответить 
Старый 30.05.2009 13:42   #5  
Аватар для shumbola
Оффлайн
Сообщений: 3,327
+ 337  892/590
– 3  31/25

Uzbekistan
Цитата:
Сообщение от Nematjon Посмотреть сообщение
ya iskal otvet etom voprose v google , no ничего не нашел !


drugie idea est ?
za ranie spasiba .
Я когда-то сталкивался с подобной проблемой и пошел по пути наименьшего сопротивления, изменил свою функцию так, чтобы результат возвращался через параметр:
Вместо MyStruct MyFunction(param1) написал int MyFunction(param1, MyStruct &my)

Если есть исходники на С можно поступить так, если нет то написать враппер и уже из под С# вызывать враппер.
Ответить 
Старый 30.05.2009 13:54   #6  
Аватар для Nematjon
Оффлайн
-
Developer
Сообщений: 8
+ 0  0/0
– 0  0/0

Uzbekistan
struktura SYSTEMTIME obyavlena v WinBase.h .

[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME
{
[MarshalAs(UnmanagedType.U2)]
public ushort Year;
[MarshalAs(UnmanagedType.U2)]
public ushort Month;
[MarshalAs(UnmanagedType.U2)]
public ushort DayOfWeek;
[MarshalAs(UnmanagedType.U2)]
public ushort Day;
[MarshalAs(UnmanagedType.U2)]
public ushort Hour;
[MarshalAs(UnmanagedType.U2)]
public ushort Minute;
[MarshalAs(UnmanagedType.U2)]
public ushort Second;
[MarshalAs(UnmanagedType.U2)]
public ushort Milliseconds;

//public SYSTEMTIME(DateTime dt)
//{
// Year = (short)dt.Year;
// Month = (short)dt.Month;
// DayOfWeek = (short)dt.DayOfWeek;
// Day = (short)dt.Day;
// Hour = (short)dt.Hour;
// Minute = (short)dt.Minute;
// Second = (short)dt.Second;
// Milliseconds = (short)dt.Millisecond;
//}
}
typedef unsigned long DWORD;
typedef int BOOL;

Ya testiroval vse vozmojnie variante (char , char [] ,string, byte , long , ... )

no kajdiy raz eto problema !
Ответить 
Старый 30.05.2009 13:56   #7  
Аватар для Nematjon
Оффлайн
-
Developer
Сообщений: 8
+ 0  0/0
– 0  0/0

Uzbekistan
Цитата:
Сообщение от shumbola Посмотреть сообщение
Цитата:
Сообщение от Nematjon Посмотреть сообщение
ya iskal otvet etom voprose v google , no ничего не нашел !


drugie idea est ?
za ranie spasiba .
Я когда-то сталкивался с подобной проблемой и пошел по пути наименьшего сопротивления, изменил свою функцию так, чтобы результат возвращался через параметр:
Вместо MyStruct MyFunction(param1) написал int MyFunction(param1, MyStruct &my)

Если есть исходники на С можно поступить так, если нет то написать враппер и уже из под С# вызывать враппер.

xoroshiy idea ,
Ответить 
Реклама и уведомления
Старый 30.05.2009 14:23   #8  
Аватар для Nematjon
Оффлайн
-
Developer
Сообщений: 8
+ 0  0/0
– 0  0/0

Uzbekistan
naverno moy problema etot mesta

wchar_t wszName[256];
wchar_t wszFullPath[2048];

v C# kak mojna opredelit etot parametri ili struktura Node_Ex ?
Ответить 
Старый 30.05.2009 23:01   #9  
Pre Open ID Group
Аватар для Khamza Davletov
Оффлайн
Сообщений: 30
+ 34  6/3
– 0  0/0

UzbekistanОтправить сообщение для Khamza Davletov с помощью ICQОтправить сообщение для Khamza Davletov с помощью YahooОтправить сообщение для Khamza Davletov с помощью Skype™
Nematjon, а вы можете залить этот импортируемый .dll файл сюда на форум? (rapidshare.com, filefactory.com, ifolder.ru...)
Ответить 
Старый 31.05.2009 21:38   #10  
Аватар для Наташа
Оффлайн
Сообщений: 1,306
+ 885  788/480
– 0  51/26

Germany
Цитата:
Сообщение от Nematjon Посмотреть сообщение
wchar_t wszName[256]; wchar_t wszFullPath[2048];
мож так
char[] wszName;
char[] wszFullPath;
а потом инициализировать
_Node_Ex(bool superFkt)
{
wszName= new char[256];
wszFullPath =new char[2048];
}
а вызывать так...
_Node_Ex n1 =new _Node_Ex(true);
n1= (_Node_Ex)GetNode(1);

но это может совcем быть не правельно... -так себе придумала

но я б на вашем месте не выкручивалась а попробывала написать просто
DLLNAME.Node_Ex n1=GetNode(1);
-ток тож не знаю правильно ли это...

Последний раз редактировалось Наташа; 31.05.2009 в 21:53.
Ответить 
Ответить




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх