Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Bu kodu çevirirken nerede hata yapıyorum ?
#1
Ustalarım merhaba. Adb protocokolünü kullanarak android cihazlara bağlanmak istiyorum. Yalnız bunu adb.exe kullanamadan yapmak istiyorum. C++ ve python kodu olarak internette var delphiye çeviriyorum ama bir türlü hata vermemesini sağlayamadım.

C++ kodu şu şekilde.


AdbOperator.h
#if !defined(AFX_ADBOPERATOR_H__5DEB1F22_4BE7_4C25_9541_D4F238676DDC__INCLUDED_)
#define AFX_ADBOPERATOR_H__5DEB1F22_4BE7_4C25_9541_D4F238676DDC__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// AdbOperator.h : header file
//

typedef void* ADBAPIHANDLE;

typedef struct _AdbInterfaceInfo {
    /// Inteface's class id (see SP_DEVICE_INTERFACE_DATA for details)
    GUID          class_id;
    
    /// Interface flags (see SP_DEVICE_INTERFACE_DATA for details)
    unsigned long flags;
    
    /// Device name for the interface (see SP_DEVICE_INTERFACE_DETAIL_DATA
    /// for details)
    wchar_t       device_name[1];
} AdbInterfaceInfo;

typedef enum _AdbOpenAccessType {
    /// Opens for read and write access.
    AdbOpenAccessTypeReadWrite,
        
        /// Opens for read only access.
        AdbOpenAccessTypeRead,
        
        /// Opens for write only access.
        AdbOpenAccessTypeWrite,
        
        /// Opens for querying information.
        AdbOpenAccessTypeQueryInfo,
} AdbOpenAccessType;


typedef enum _AdbOpenSharingMode {
    /// Shares read and write.
    AdbOpenSharingModeReadWrite,
        
        /// Shares only read.
        AdbOpenSharingModeRead,
        
        /// Shares only write.
        AdbOpenSharingModeWrite,
        
        /// Opens exclusive.
        AdbOpenSharingModeExclusive,
} AdbOpenSharingMode;

typedef bool (__cdecl *AdbCloseHandle)(ADBAPIHANDLE);
typedef ADBAPIHANDLE (__cdecl *AdbEnumInterfaces)(GUID,bool,bool,bool);
typedef bool (__cdecl *AdbNextInterface)(ADBAPIHANDLE,AdbInterfaceInfo*,unsigned long*);
typedef ADBAPIHANDLE (__cdecl *AdbCreateInterface)(GUID,unsigned short,unsigned short,unsigned char);
typedef ADBAPIHANDLE (__cdecl *AdbOpenDefaultBulkReadEndpoint)(ADBAPIHANDLE,AdbOpenAccessType,AdbOpenSharingMode);

/////////////////////////////////////////////////////////////////////////////
// AdbOperator window

class AdbOperator
{
// Construction
public:
    AdbOperator();

// Attributes
public:

// Operations
public:
    HMODULE m_hAdbwinapi;
    AdbCloseHandle m_pAdbCloseHandle;
    AdbEnumInterfaces m_pAdbEnumInterfaces;
    AdbNextInterface m_pAdbNextInterface;
    AdbCreateInterface m_pAdbCreateInterface;
    AdbOpenDefaultBulkReadEndpoint m_pAdbOpenDefaultBulkReadEndpoint;

    BOOL InitAdbApi();
    VOID DeInitAdbApi();
    int  ScanAdbDevice();
   BOOL IsAdbDeviceOnline();
   int ExecPackCmd(long nUserdataSize);
   BOOL PullImage(CString strTargetImagePath);
    virtual ~AdbOperator();
   
    // Generated message map functions
protected:
private:
   CString m_strModulePath;
    CString m_strAdbDllePath;
   int Exec(char** bufRawOutput, const CString adbCmd, int nTimeoutCount);
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_ADBOPERATOR_H__5DEB1F22_4BE7_4C25_9541_D4F238676DDC__INCLUDED_)


AdbOperator.cpp

// AdbOperator.cpp : implementation file
//

#include "stdafx.h"
#include "FirmwareModifier.h"
#include "AdbOperator.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern cmLog *g_pPluginLogObject;
#define ANDROID_USB_CLASS_ID \
{0xf72fe0d4, 0xcbcb, 0x407d, {0x88, 0x14, 0x9e, 0xd6, 0x73, 0xd0, 0xdd, 0x6b}};
static const GUID usb_class_id = ANDROID_USB_CLASS_ID;

/////////////////////////////////////////////////////////////////////////////
// AdbOperator

AdbOperator::AdbOperator()
{
   // Init module path
   GetModuleFileName(NULL, m_strModulePath.GetBuffer(MAX_PATH), MAX_PATH);
   m_strModulePath.ReleaseBuffer();
   m_strModulePath = m_strModulePath.Left(m_strModulePath.ReverseFind(_T('\\'))+1);
    m_strAdbDllePath = m_strModulePath.Left(m_strModulePath.ReverseFind(_T('\\'))+1)+_T("bin\\");
}

AdbOperator::~AdbOperator()
{
}

BOOL AdbOperator::InitAdbApi()
{
    g_pPluginLogObject->Record(_T("%s"),m_strAdbDllePath+ _T("AdbWinApi.dll"));
    if (!PathFileExists(m_strAdbDllePath + _T("AdbWinApi.dll")))
    {
        CString strSysDir=_T("");
        GetWindowsDirectory(strSysDir.GetBuffer(MAX_PATH),MAX_PATH);
        strSysDir.ReleaseBuffer();
        if (strSysDir.IsEmpty())
        {
            strSysDir = _T("c:\\windows\\system32\\");
        }
        else
        {
            strSysDir += _T("\\system32\\");
        }
        if (!PathFileExists(strSysDir + _T("AdbWinApi.dll")))
        {
            if (g_pPluginLogObject)
            {
                g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->PathFileExists failed"));
            }
            return FALSE;
        }
        m_hAdbwinapi = LoadLibrary(strSysDir + _T("AdbWinApi.dll"));
    }
    else
        m_hAdbwinapi = LoadLibrary(m_strAdbDllePath + _T("AdbWinApi.dll"));

    if (!m_hAdbwinapi)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->LoadLibrary failed"));
        }
        return FALSE;
    }
    m_pAdbCloseHandle = (AdbCloseHandle)GetProcAddress( m_hAdbwinapi, "AdbCloseHandle");
    if (m_pAdbCloseHandle==NULL)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->Get AdbCloseHandle failed"));
        }
        return FALSE;
    }

    m_pAdbEnumInterfaces = (AdbEnumInterfaces)GetProcAddress( m_hAdbwinapi, "AdbEnumInterfaces");
    if (m_pAdbEnumInterfaces==NULL)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->Get AdbEnumInterfaces failed"));
        }
        return FALSE;
    }

    m_pAdbNextInterface = (AdbNextInterface)GetProcAddress( m_hAdbwinapi, "AdbNextInterface");
    if (m_pAdbNextInterface==NULL)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->Get AdbNextInterface failed"));
        }
        return FALSE;
    }

    m_pAdbCreateInterface = (AdbCreateInterface)GetProcAddress( m_hAdbwinapi, "AdbCreateInterface");
    if (m_pAdbCreateInterface==NULL)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->Get AdbCreateInterface failed"));
        }
        return FALSE;
    }

    m_pAdbOpenDefaultBulkReadEndpoint = (AdbOpenDefaultBulkReadEndpoint)GetProcAddress( m_hAdbwinapi, "AdbOpenDefaultBulkReadEndpoint");
    if (m_pAdbOpenDefaultBulkReadEndpoint==NULL)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:InitAdbApi-->Get AdbOpenDefaultBulkReadEndpoint failed"));
        }
        return FALSE;
    }
/*
    ADBAPIHANDLE adbHandle=NULL,pipeHandle=NULL;
    adbHandle = m_pAdbCreateInterface(usb_class_id,0x0bb4,0x0c02,0x1);
    if (adbHandle)
    {
        //      HANDLE hDevice = INVALID_HANDLE_VALUE;
        //       CString strDevPipe=_T("\\\\?\\usb#vid_0bb4&pid_0c02&mi_01#6&21ed2e15&0&0001#{f72fe0d4-cbcb-407d-8814-9ed673d0dd6b}\\BullkWrite");
        //       hDevice = CreateFile(strDevPipe,
        //      GENERIC_WRITE,
        //       FILE_SHARE_WRITE,
        //      NULL,
        //       OPEN_EXISTING,
        //       FILE_FLAG_OVERLAPPED,
        //       NULL);
        //      int iErr;
        //      iErr = GetLastError();
        pipeHandle = m_pAdbOpenDefaultBulkReadEndpoint(adbHandle,AdbOpenAccessTypeReadWrite,AdbOpenSharingModeReadWrite);
        m_pAdbCloseHandle(adbHandle);
    }
    else
    {
        int iErr;
        iErr = GetLastError();
    }
*/
    return TRUE;

}


VOID AdbOperator::DeInitAdbApi()
{
    if (m_hAdbwinapi)
    {
        FreeLibrary(m_hAdbwinapi);
        m_hAdbwinapi = NULL;
    }
    if (m_pAdbCloseHandle)
    {
        m_pAdbCloseHandle = NULL;
    }
    if (m_pAdbEnumInterfaces)
    {
        m_pAdbEnumInterfaces = NULL;
    }
    if (m_pAdbNextInterface)
    {
        m_pAdbNextInterface = NULL;
    }
}


int  AdbOperator::ScanAdbDevice()
{
    char entry_buffer[2048];
    char interf_name[2048];
    AdbInterfaceInfo* next_interface = (AdbInterfaceInfo*)(&entry_buffer[0]);
    unsigned long entry_buffer_size = sizeof(entry_buffer);
    char* copy_name;
    int nDeviceCount=0;
    // Enumerate all present and active interfaces.
    ADBAPIHANDLE enum_handle = m_pAdbEnumInterfaces(usb_class_id, true, true, true);

    if (NULL == enum_handle)
    {
        if (g_pPluginLogObject)
        {
            g_pPluginLogObject->Record(_T("ERROR:ScanAdbDevice-->AdbEnumInterfaces failed,ErrCode(%d)"),GetLastError());
        }
        return nDeviceCount;
    }

    while (m_pAdbNextInterface(enum_handle, next_interface, &entry_buffer_size))
    {
        // TODO: FIXME - temp hack converting wchar_t into char.
        // It would be better to change AdbNextInterface so it will return
        // interface name as single char string.
        const wchar_t* wchar_name = next_interface->device_name;
        for(copy_name = interf_name;L'\0' != *wchar_name;wchar_name++, copy_name++)
        {
            *copy_name = (char)(*wchar_name);
        }
        *copy_name = '\0';

        nDeviceCount++;

        entry_buffer_size = sizeof(entry_buffer);
    }
    m_pAdbCloseHandle(enum_handle);
    return nDeviceCount;
}

int AdbOperator::Exec( char** bufRawOutput, const CString adbCmd, int nTimeoutCount )
{
   char cmd[MAX_PATH+256];
   CString strCmd = m_strModulePath + _T("bin\\adb.exe ") + adbCmd;
   em::EmCharSet::Tcs2Mbs(cmd, (LPTSTR)(LPCTSTR)strCmd);
    g_pPluginLogObject->Record(strCmd);
   return em::EmProcess::SendCommand(bufRawOutput, cmd, nTimeoutCount);
}

BOOL AdbOperator::IsAdbDeviceOnline()
{
   char *online = "device";
   char *retBuf = NULL;
   LPTSTR lpStr = NULL;
   int nSize = 0;
   int nRet = 0;
 
   nRet = Exec(&retBuf, _T("devices"), 5);
   if (nRet > 0) {
       char *ptr;
       ptr = strstr(retBuf, online);
       if (ptr) {
           if (retBuf)
           {
               delete retBuf;
               retBuf = NULL;
           }
           return TRUE;
       }
   }

   if (retBuf)
   {
       AnsiToUnicode(lpStr,nSize,retBuf);
       g_pPluginLogObject->Record(_T("IsAdbDeviceOnline faild, return:%d, reson:%s"), nRet, lpStr);
       delete retBuf;
        delete lpStr;
       retBuf = NULL;
   }
   else
   {
       g_pPluginLogObject->Record(_T("IsAdbDeviceOnline faild, return:%d"), nRet);
   }

   return FALSE;
}

int AdbOperator::ExecPackCmd(long nUserdataSize)
{
   char *ok = "PACK_OK";
   char *error = "PACK_ERROR";
   char *retBuf = NULL;
   LPTSTR lpStr = NULL;
   int nSize = 0;
   int nRet = 0;
    int i=0;

    g_pPluginLogObject->Record(_T("ExecPackCmd nUserdataSize:%ld"), nUserdataSize);
   CString cmd;

   cmd.Format(_T("shell /system/bin/packdata.sh %u"), nUserdataSize);
    nRet = Exec(&retBuf, cmd, 60*5);
    
   if (nRet > 0) {
       char *ptr;
       ptr = strstr(retBuf, ok);
       if (ptr) {
           if (retBuf) {
               delete retBuf;
               retBuf = NULL;
           }
           return 0;
       } else {
           LPWSTR wstrRetBuf;
           int nSize;
           if (AnsiToUnicode(wstrRetBuf,nSize,retBuf)) {
               g_pPluginLogObject->Record(wstrRetBuf);
               delete wstrRetBuf;
               wstrRetBuf = NULL;
           }
           if (retBuf) {
               delete retBuf;
               retBuf = NULL;
           }
           return -1;
       }
       if (retBuf) {
           delete retBuf;
           retBuf = NULL;
       }
       return TRUE;
   }

   if (retBuf)
   {
       AnsiToUnicode(lpStr,nSize,retBuf);
       g_pPluginLogObject->Record(_T("ExecPackCmd faild, return:%d, reson:%s"), nRet, lpStr);
       delete retBuf;
        delete lpStr;
       retBuf = NULL;
   }
   else
   {
       g_pPluginLogObject->Record(_T("ExecPackCmd faild, return:%d"), nRet);
   }
   return -2;
}

BOOL AdbOperator::PullImage(CString strTargetImagePath)
{
   char *tag = "KB/s";
   char *retBuf = NULL;
   LPTSTR lpStr = NULL;
   int nSize = 0;
   int nRet = 0;

   CString cmd = _T("pull /mnt/sdcard/databk.img ");
   cmd += strTargetImagePath;
   nRet = Exec(&retBuf, cmd, 600);
    //g_pPluginLogObject->Record(_T("PullImage %s\n"),retBuf);
   if (nRet > 0) {
       char *ptr;
       ptr = strstr(retBuf, tag);
       if (ptr) {
           if (retBuf) {
               delete retBuf;
               retBuf = NULL;
           }
           return TRUE;
       }
   }
   if (retBuf)
   {
       AnsiToUnicode(lpStr,nSize,retBuf);
       g_pPluginLogObject->Record(_T("PullImage faild, return:%d, reson:%s"), nRet, lpStr);
       delete retBuf;
        delete lpStr;
       retBuf = NULL;
   }
   else
   {
       g_pPluginLogObject->Record(_T("PullImage faild, return:%d"), nRet);
   }
   return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// AdbOperator message handlers



Python kodu şu şekilde 

import ctypes


class GUID(ctypes.Structure):
  _fields_ = [("Data1", ctypes.c_ulong),
              ("Data2", ctypes.c_ushort),
              ("Data3", ctypes.c_ushort),
              ("Data4", ctypes.c_ubyte*8)]


class AdbInterfaceInfo(ctypes.Structure):
  _fields_ = [("class_id", GUID),
              ("flags", ctypes.c_ulong),
              ("device_name", ctypes.c_wchar*800)]

def strGUID(GUID):
  string = ''
  string = string + '%x' % buff.class_id.Data1 + '-%x' % buff.class_id.Data2 + '-%x' % buff.class_id.Data3
  string = string + '-%x' % buff.class_id.Data4[0]
  string = string + '%x' % buff.class_id.Data4[1]
  string = string + '%x' % buff.class_id.Data4[2]
  string = string + '%x' % buff.class_id.Data4[3]
  string = string + '%x' % buff.class_id.Data4[4]
  string = string + '%x' % buff.class_id.Data4[5]
  string = string + '%x' % buff.class_id.Data4[6]
  string = string + '%x' % buff.class_id.Data4[7]
  return string

dll = ctypes.cdll.LoadLibrary('AdbWinApi.dll')
usb_class_id = GUID(0xF72FE0D4, 0xCBCB, 0x407d, (0x88, 0x14, 0x9e, 0xd6, 0x73, 0xd0, 0xdd, 0x6b))
enum_handle = dll.AdbEnumInterfaces(usb_class_id, ctypes.c_bool('true'), ctypes.c_bool('true'), ctypes.c_bool('true'))

while(1):
  buff = AdbInterfaceInfo()
  size = ctypes.c_ulong(ctypes.sizeof(buff))
  status = dll.AdbNextInterface(enum_handle, ctypes.byref(buff), ctypes.byref(size))

  if status==1:
      #print "GUID = " + strGUID(buff.class_id)
      #print "status = " + str(status)
      #print "Name = " + str(buff.device_name)
      hAdbApi = dll.AdbCreateInterfaceByName(buff.device_name);
      if hAdbApi == 0:
          print 'AdbCreateInterfaceByName Fail'
      else:
          serial = ' '*128
          pserial = ctypes.c_char_p()
          pserial.value = serial
          serial_len = ctypes.c_ulong(len(serial))
          ret = dll.AdbGetSerialNumber(hAdbApi, pserial, ctypes.byref(serial_len), ctypes.c_bool('false'));
          if ret == 1:
              print 'Device Name: ' + '%s'% serial
          else:
              print 'Get Device Name Fail'
  else:
      print 'Finished'
      break



Benim kodumda şu şekilde.

unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TForm1 = class(TForm)
   mmo1: TMemo;
   btn1: TButton;
   procedure btn1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;
type

 ADBAPIHANDLE = Pointer;
type
AdbInterfaceInfo = packed record
   class_id: TGUID;
   flags : LongWord;
   device_name: Pwidechar;
 end;

var
 Form1: TForm1;
 AdbLoad: THandle;
 enum_handle: ADBAPIHANDLE;

 AdbEnumInterfaces:  function(class_id: TGUID; exclude_not_present: Boolean;
                                                exclude_removed:     Boolean;
                                                active_only:         Boolean): ADBAPIHANDLE; cdecl;

 AdbNextInterface:  function(adb_handle:ADBAPIHANDLE;Info : AdbInterfaceInfo;Size : LongWord): Bool; cdecl;
implementation

{$R *.dfm}


Procedure LoadMyLibrary(FileName: String);
begin
   AdbLoad := LoadLibrary(PWideChar(FileName));
     if AdbLoad = 0 then begin
         MessageBox(0,'Hata',0,0);
         exit;
     end;
   AdbEnumInterfaces := GetProcAddress(Adbload, 'AdbEnumInterfaces');
   AdbNextInterface  := GetProcAddress(AdbLoad, 'AdbNextInterface');
   //AdbCloseHandle    := GetProcAddress(AdbLoad, 'AdbCloseHandle');
     if @AdbEnumInterfaces = nil then
     begin
        MessageBox(0,'Hata',0,0);
        exit;
     end;

          if @AdbNextInterface = nil then
          begin
        MessageBox(0,'Hata',0,0);
        exit;
     end;



end;




procedure TForm1.btn1Click(Sender: TObject);

const
   ANDROID_USB_CLASS_ID: TGUID = '{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}';
   var
   Checkinfo : AdbInterfaceInfo;
   Size : LongWord;
begin
enum_handle := AdbEnumInterfaces(ANDROID_USB_CLASS_ID, True, True, True);





 if AdbNextInterface(enum_handle,Checkinfo,Size) then
  ShowMessage('başarılı')
  else
  ShowMessage('hata');




end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 LoadMyLibrary('AdbWinApi.dll');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeLibrary(Adbload);
end;

end.


AdbInterfaceInfo bulunan device_name pwide char yerine array char olarak kullandım gene hata ile karşılaşıyorum.Altta kullandığım dll dosyaları var. Yardımcı olabilirmisiniz nerede hata yapıyorum ? 

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#2
Güncel ustalarım . AdbNextInterface hala hata alıyorum...
Cevapla
#3
Kardeşim sorunu detaylı açıklaman lazım. Sadece kodu verip cevap bulman zor.
Cevapla
#4
(10-02-2019, Saat: 19:20)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Kardeşim sorunu detaylı açıklaman lazım. Sadece kodu verip cevap bulman zor.

hocam sorun şu.

procedure TForm1.btn1Click(Sender: TObject);
 
const
  ANDROID_USB_CLASS_ID: TGUID = '{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}';
  var
  Checkinfo : AdbInterfaceInfo;
  Size : LongWord;
begin
enum_handle := AdbEnumInterfaces(ANDROID_USB_CLASS_ID, True, True, True);





if AdbNextInterface(enum_handle,Checkinfo,Size) then
 ShowMessage('başarılı')
 else
 ShowMessage('hata');




end;

bu kodda bool değeri false olarak geri dönüyor. Cihaz takılı olduğu halde.
Cevapla
#5
Soruda gereksiz kısımları silmediysen kod eksik çevrilmiş gibi. Size değerini vermemişsin görünüyor.

Alttaki satırın karşılığını göremedim.

unsigned long entry_buffer_size = sizeof(entry_buffer);

Bu tip enumeration işlemlerinde dolduracağın bir buffer ile bunun boyutunu genellikle baştan vermek gerekir.
Cevapla
#6
(10-02-2019, Saat: 19:32)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Soruda gereksiz kısımları silmediysen kod eksik çevrilmiş gibi. Size değerini vermemişsin görünüyor.

Alttaki satırın karşılığını göremedim.

unsigned long entry_buffer_size = sizeof(entry_buffer);

Bu tip enumeration işlemlerinde dolduracağın bir buffer ile bunun boyutunu genellikle baştan vermek gerekir.

hocam yukardaki record girdisini şu şekilde düzenledim.

type
AdbInterfaceInfo = packed record
   class_id: TGUID;
   flags : LongWord;
   device_name: array[0..2048] of Char;
 end;


aşağıdakinide şu şekilde düzenledim.

const
    ANDROID_USB_CLASS_ID: TGUID = '{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}';
   var
   Checkinfo : AdbInterfaceInfo;
   Size : LongWord;
begin
enum_handle := AdbEnumInterfaces(ANDROID_USB_CLASS_ID, True, True, True);



  Size := 2048 ;

 if AdbNextInterface(enum_handle,Checkinfo,Size) then
  ShowMessage('başarılı')
  else
  ShowMessage('hata');




end;

gene hata verdi. Yukardaki recordu pwidechar yapsam dahi aynı hata devam etmekte malasef...
Cevapla
#7
Kodda çok eksik var görünüyor ve incelenmesi gereken çok yer var.
Program çalışırken debug yapıp inceleyebilirsin.

Kodun tamamen aktarıldığından emin olmak gerekiyor.
Sadece metne bakıp söylemek zor.
Cevapla
#8
Hocam recordlardaki packed ifadelerini kullanmadan bir dener misiniz?
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.

Cevapla
#9
(10-02-2019, Saat: 20:01)ssahinoglu Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Kodda çok eksik var görünüyor ve incelenmesi gereken çok yer var.
Program çalışırken debug yapıp inceleyebilirsin.

Kodun tamamen aktarıldığından emin olmak gerekiyor.
Sadece metne bakıp söylemek zor.

hocam kodun tamamı yukarıda farklı bir kod yok aralarında. Yada kaçan. Zaten google protocol yazılarında sırası bu şekilde. İlk AdbEnumInterfaces ardından AdbNextInterface çağırılıyor. AdbEnumInterfaces  sorunsuz çağrılıyor ama ikincisi malasef çağrılmıyor.

(10-02-2019, Saat: 20:03)savasabd Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Hocam recordlardaki packed ifadelerini kullanmadan bir dener misiniz?

gene aynı hata malasef false olarak döndürüyor.
Cevapla
#10
AdbInterfaceInfo* next_interface = (AdbInterfaceInfo*)(&entry_buffer[0]);
için

 var
   Checkinfo : AdbInterfaceInfo;

if AdbNextInterface(enum_handle,Checkinfo,Size)


karşılığı doğru mu?
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Aign:=alLeft kullanımındaki hata 41linea41 4 108 13-09-2019, Saat: 22:38
Son Yorum: 41linea41
  [ÇÖZÜLDÜ]Server İşletim Sisteminde Çalışan Windows Servis te is not a valid date Hata theSinan 9 242 28-08-2019, Saat: 10:05
Son Yorum: adelphiforumz
  ÇÖZÜLDÜ-daha önce çalışan kod hata veriyor firebird sadikacar60 5 197 25-08-2019, Saat: 21:07
Son Yorum: mcuyan
  Soket bağlantı hata penceresi ... Gürcan 0 142 19-07-2019, Saat: 18:00
Son Yorum: Gürcan
  Çözüldü-sql kodu dengesiz çalışıyor sadikacar60 4 428 11-07-2019, Saat: 14:28
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi