Smartdeviceapplication

  • Автор темы _DeMiUrG_
  • Дата начала
D

_DeMiUrG_

#1
работаю с Microsoft Visual C# .NET

есть библиотека скомпилированная для Windows
в ней функции которые воспринимают в качестве входящих параметров
указатель на структуру данных

в основном теле программы я обьявляю структуру данных, обьявляю DLL

начинаю создавать переменную указатель на структуру в самом теле программы

Структура кода примерно такова:

Код:
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

public struct DLLDATA
{
public int X1;
public int X2;
public int X3;
};

public class Win32
{
[DllImport("TEST.dll", CharSet=CharSet.Auto)]
public static extern long CheckDllDataRange(ref DLLDATA data);
};

namespace SmartDeviceApplication2
{
public class Form1 : System.Windows.Forms.Form
{
...

DLLDATA DllData;

protected override void Dispose( bool disposing )
{ base.Dispose( disposing ); }
#region Windows Form Designer generated code

private void InitializeComponent()
{ ... }
#endregion

static void Main()
{
Application.Run(new Form1());
}

private void btnCalc_Click(object sender, System.EventArgs e)
{
// DLLDATA DllData = new DLLDATA();
DllData.X1 = 1;
DllData.X2 = 2;
DllData.X3 = 3;

long range = Win32.CheckDllDataRange(ref DllData);

y=DllData.spn;
x = DllData.speedk;
}//Calc

билд прошел , А в эмуляторе для Pocket PC
загружается форма , работают события
элементов на форме

а после обращения к фунции содержащейся в DLL
на private void btnCalc_Click
идет опять ошибка :

выдает такую надпись

"A managed NotSupportedException
occurred at Application::Run+0x1a

Application::Run+0x1a
Form1::Main+0xa
OK to terminate"

DLL с другими приложениями работет.

то сделать тобы DLL заработало в SmartDeviceApplication?
 
D

_DeMiUrG_

#2
Пробую писать вот так
int size = Marshal.SizeOf(DllData);
IntPtr buffer= Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(DllData, buffer, false);

Win32.CheckDllDataRange(buffer);

Вот на эту строку ругань:
IntPtr buffer= Marshal.AllocHGlobal(size);
'System.Runtime.InteropServices.Marshal' does not contain a definition for 'AllocHGlobal'



Пишу так:
IntPtr buffer;

...
int size = Marshal.SizeOf(DllData);
Marshal.StructureToPtr(DllData, buffer, false);
Win32.CheckDllDataRange(buffer);

Компилируется но опять ругань на вызов DLL((.
 
P

Pasha

#3
Для: _DeMiUrG_
Эта dll откомпилирована под smart device? Или ты пытаешься win32 dll под windows mobile загрузить?
 
D

_DeMiUrG_

#5
:) не так просто ее переделать
а еще доп работа появилась
вообщем как что то будет отпишусь