C'den C#'A Veri Cekmek ?
-
Merhaba Arkadaslar Elimdeki Header file icersinde asagidaki gibi 2 tane function tanimli.
//SDK_C.h //////////////////////////////////////////////////
typedef struct{
uchar Command[4];
ushort Lc;
uchar DataIn[512];
ushort Le;
}CON_SEND;
typedef struct{
ushort LenOut;
uchar DataOut[512];
uchar outA;
uchar outB;
}CON_RESP;
SDK_C_DLL_API int Csdk_Cmd(uchar port, CON_SEND * ConSend,CON_RESP * ConResp);
SDK_C_DLL_API int Csdk_Open(uchar port);
//////////////////////////////////////////////////////////////////
Bu functionlari bu sekilde c#'a cevirmeye calistim.
// SDK_C.cs //////////////////////////////////////////////////
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CON_SEND
{
public byte[] Command;
public System.UInt16 Lc;
public byte[] DataIn;
public System.UInt16 Le;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CON_RESP
{
public System.UInt16 LenOut;
public byte[] DataOut;
public byte outA;
public byte outB;
}
[DllImport("SDK_C.dll")]
public static extern System.Int16 Csdk_Cmd(System.Byte port, [In, Out] CON_SEND ConSend, [In, Out] CON_RESP ConResp);
//public static extern System.Int16 Csdk_Cmd(System.Byte port, ref CON_SEND ConSend, ref CON_RESP ConResp);
[DllImport("SDK_C.dll")]
public static extern System.Int16 Csdk_Open(System.Byte port);
/////////////////////////////////////////////////////
Csdk_Cmd kismini calistiramadim ama Csdk_Open calisiyor. Yani yolladigim portun acikmi kapali mi oldugunun bilgisini veriyor. struct'in cevirimi ile ilgili bir hata mi yapmisim acaba sizin gozunuze carpan bir sorun varmidir ?
-
[in, out] nedir ilk kez gördüm :) c# da da pointer kullanabiliyorsun, C de olduğu gibi c# dakini de pointer olarak yapabilirsin?
-
public static extern System.Int16 Csdk_Cmd(System.Byte port, [In, Out] CON_SEND ConSend, [In, Out] CON_RESP ConResp);
olan satiri
public static extern System.Int16 Csdk_Cmd(System.Byte port, CON_SEND * ConSend, CON_RESP * ConResp);
Olarak degistirdigimde bunu aliyorum :
Error1Pointers and fixed size buffers may only be used in an unsafe contextC:\Users\rakkoc\Documents\Visual Studio 2005\Projects\test\DeviceApplication1\DeviceApplication1\SDK_C.cs3873DeviceApplication1
bu davayi anlamadim ben :\
-
metodunu unsafe olarak işaretlemeyi dener misin?
public ...... unsafe ..... .... ( ...)
{
}
gibi
edit: derlerken de unsafe olarak derlemen gerekiyor
http://msdn.microsoft.com/en-us/library/ct597kb0(v=vs.80).aspx
unbalanced tarafından 28/Mar/13 11:37 tarihinde düzenlenmiştir -
c++'da ki structların içinde ki değişkenleri c#'a göre kontrol eder misin?. mesela system.int16 yerine Inptr dener misin?
attackatak tarafından 28/Mar/13 13:58 tarihinde düzenlenmiştir
[in,out] nedir harbiden? orada gerekli bir şey mi? -
attackatak bunu yazdı
c++'da ki structların içinde ki değişkenleri c#'a göre kontrol eder misin?. mesela system.int16 yerine Inptr dener misin?
[in,out] nedir harbiden? orada gerekli bir şey mi?ref diye denedim olmayinca bir yerde in out gordum onu denedim :) o kisimda ne yapti isem kargasa oldu :)
Ref ile yapincada "NotSupportedException" aliyorum.
rakkoc tarafından 28/Mar/13 15:08 tarihinde düzenlenmiştir -
çözemedin mi hocam hala ?
-
hocam o sekilde yaptigimda benim gonderdigim kodlar { 0xE0, 0xA0, 0xC4, 0x72 } seklinde fakat makineye random birseyler gidiyor.
WinCe ile ilgili bir problem anladigim kadari ile ayni islemi REF ile de yapabiliyormusuz onu yapmaya calisiyorum suanda.
-
hocam ref out kullanman gerekiyorsa ikisinden birini kullanabilirsin. ikisi de ayn işe yarıyor, aralarındaki tek fark out da ilk değeri atamak zorunda değilsin.o yüzden bu fonksiyonu çağırırken parametre boş olabilir out kullanıyorsan.
-
unbalanced bunu yazdı
hocam ref out kullanman gerekiyorsa ikisinden birini kullanabilirsin. ikisi de ayn işe yarıyor, aralarındaki tek fark out da ilk değeri atamak zorunda değilsin.o yüzden bu fonksiyonu çağırırken parametre boş olabilir out kullanıyorsan.
baya birsey denedim :) ama tek cevap donduren senin verdion ornek oldu. bi o verdi oda yanlis verdi :( giden fixed olunca onun icine veri atasanda o kendi verisini uretip gonderiyor. giden verinin zaten pointer ile gitmesi sacma. Bu dll'i yazan adamin aklina tukurim.
-
c++ da pointer çok kullanılıyor hocam. c# da o kadar rastlanan bir şey değil, ihtiyaç yok çünkü.. istersen teamviewer ile tekrar bakabilirm