Мне нужно понять только одну единственную инструкцию и, соответственно, мне нужно обобщить вещи.
Мне нужно передать структуры (объекты пользовательских типов данных) во время выполнения, используя следующий код сборки.
Где ниже указан пользовательский тип данных, а именно WESContext:
typedef struct CWESContext
{
BSTR UserName;
BSTR MachineIP;
BSTR Certificate;
BSTR BrowserClienthandle;//Its the handle of the BrowserClient or Java Application Level Object
BSTR SessionID;
BSTR TaskID;// name of the original task
long LocaleID;//The location of the ultimate Caller
long FeatureID;//The feature ID mapping to some feature available in WESFW
long SessionTypeID;//Itmay be; Browser CLient Session, OPC Client Session, Authenticated OPC Clients session(as they have more rights), WESFWSystemClient.
SYSTEMTIME TimeStamp;//the time the original task was executed
DWORD Priority; //task priority of the original task
struct WESProductCategory
{
BSTR ProductCategoryName;
int serialNo;
struct WESDimensions
{
int weight;
struct WESVolume
{
int length;
int heigth;
int width;
} oVolume;
BSTR tempHeight;
BSTR otherUnknownDimensions;
} oDimensions;
} oWESProductCategory;
} CWESContext;
Я создал блок достаточного размера WESContext и заполнил его образцами данных.
int sizeOfWESContext = sizeof(CWESContext);
void *pWESContext = malloc(sizeOfWESContext);
void *pGenericPtr = pWESContext;
memset(pWESContext,0,sizeOfWESContext);
BSTR *bstrUserName = (BSTR*)pGenericPtr;
*bstrUserName = SysAllocString(CT2OLE(CA2T(results.at(0).c_str())));
bstrUserName++;
pGenericPtr = bstrUserName;
BSTR *bstrMachineIp = (BSTR*)pGenericPtr;
*bstrMachineIp = SysAllocString(CT2OLE(CA2T(results.at(1).c_str())));
bstrMachineIp++;
pGenericPtr = bstrMachineIp;
BSTR *bstrCertificate = (BSTR*)pGenericPtr;
*bstrCertificate = SysAllocString(CT2OLE(CA2T(results.at(2).c_str())));
bstrCertificate++;
pGenericPtr = bstrCertificate;
.....................
so on so forth...............
Если я вызываю это, передавая это как объект:
Вызов Нормалы:
MyCallableMethodUDT ( ((CWESContext ) pWESContext));
Теперь, после сборки, я только что вытащил из представления Dissasembly Visual Studio во время отладки.
mov esi,dword ptr [pWESContext]
sub esp,58h
mov ecx,16h
mov edi,esp
rep movs dword ptr es:[edi],dword ptr [esi]
Мне просто нужно понять 3-ю строку ..
КАК я увеличиваю количество членов в моей пользовательской структуре (т. Е. Здесь WESContext), она увеличивается, но я не могу понять, как она увеличивается ....? Мне нужно сгенерировать эту инструкцию так, чтобы независимо от того, каким был бы Объект, каким бы ни был размер и какие бы данные он ни содержал ... он должен пройти, вызвав его с записью инструкции сборки, как написано выше.
С уважением,
Усман