Re: Передача массива структур в VC.Net
От: LaFlour Австралия blog: http://spaces.live.com/laflour
Дата: 09.09.03 05:49
Оценка: 3 (1)
Здравствуйте, serge_, Вы писали:

_>Простите может повторюсь неоднократно, но то что раньше писалось почему то не работает,

_>при компиляции выдаёт ошибки:
_>Что неправильно в моём коде?

_>[uuid(153450BE-9F71-4193-9A00-95C58175FD8F)]
_>struct cJustUser {
_> CHAR m_szFirstName[16];
_> CHAR m_szLastName[16];
_> CHAR m_szMailAsdress[64];
_> CHAR m_szPhone[16];
_> CHAR m_szAddress[64];
_> SHORT m_nPermission;

_>}cJustUser;


Мне кажется проблеммы со структурой
Измени ее на это

[
    export, 
    uuid(153450BE-9F71-4193-9A00-95C58175FD8F)
]

struct cJustUser {
    unsigned char m_szFirstName[16];
    unsigned char m_szLastName[16];
    unsigned char m_szMailAsdress[64];
    unsigned char m_szPhone[16];
    unsigned char m_szAddress[64];
    signed short m_nPermission;
};

"Лаконичность моего ответа зависит от выставленных мне оценок. (с) LF"

Передача массива структур в VC.Net
От: serge_ Украина  
Дата: 05.09.03 13:51
Оценка:
Простите может повторюсь неоднократно, но то что раньше писалось почему то не работает,
при компиляции выдаёт ошибки:

...\vc\mail\mailserver\mserver.h(36): error MIDL2025 : syntax error : expecting a type specification near "cJustUser"
...\vc\mail\mailserver\mserver.h(36): error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation
MailServer fatal error LNK1240: failed to compile IDL content

Что неправильно в моём коде?


#pragma once
#include "resource.h" // main symbols
#include <atlsimpcoll.h>



[uuid(153450BE-9F71-4193-9A00-95C58175FD8F)]
struct cJustUser {
CHAR m_szFirstName[16];
CHAR m_szLastName[16];
CHAR m_szMailAsdress[64];
CHAR m_szPhone[16];
CHAR m_szAddress[64];
SHORT m_nPermission;

}cJustUser;


// IMServer
[
object,
uuid("FE45D72B-465A-4B2D-A7BE-1349EBDEBB0E"),
dual, helpstring("IMServer Interface"),
pointer_default(unique)
]
__interface IMServer : IDispatch
{
[id(1), helpstring("method GetMail")] HRESULT GetMail([in] VARIANT* pVal);
[id(2), helpstring("method SendMail")] HRESULT SendMail([in] VARIANT* pVal);
[id(3), helpstring("method AddUser")] HRESULT AddUser([in, satype(struct cJustUser)] SAFEARRAY * pVal);
};


// _IMServerEvents
[
dispinterface,
uuid("D5B520C9-0A44-41C7-97E7-CFB47DFCD872"),
helpstring("_IMServerEvents Interface")
]
__interface _IMServerEvents
{
};


// CMServer

[
coclass,
threading("apartment"),
support_error_info("IMServer"),
event_source("com"),
aggregatable("never"),
vi_progid("MailServer.MServer"),
progid("MailServer.MServer.1"),
version(1.0),
uuid("E682D15C-D865-4249-AB7A-6351F434BC7E"),
helpstring("MServer Class")
]


class ATL_NO_VTABLE CMServer :
public IMServer
{
public:
CMServer()
{
}

__event __interface _IMServerEvents;

DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}

public:

STDMETHOD(GetMail)(VARIANT* pVal);
STDMETHOD(SendMail)(VARIANT* pVal);
protected:
//CSimpleArray<cUser> m_Users;
public:

STDMETHOD(AddUser)(SAFEARRAY * pVal);
};



struct cMessage
{

char m_szTo[256];
char m_szFrom[256];
char m_szRecipient[256];
char m_szSender[256];
int m_nSize;



};
Re: Передача массива структур в VC.Net
От: andrey rygin  
Дата: 08.09.03 04:17
Оценка:
Здравствуйте, serge_, Вы писали:

_>Простите может повторюсь неоднократно, но то что раньше писалось почему то не работает,

_>при компиляции выдаёт ошибки:

_>[uuid(153450BE-9F71-4193-9A00-95C58175FD8F)]

_>struct cJustUser {
_> CHAR m_szFirstName[16];
_> CHAR m_szLastName[16];
_> CHAR m_szMailAsdress[64];
_> CHAR m_szPhone[16];
_> CHAR m_szAddress[64];
_> SHORT m_nPermission;

_>}cJustUser;


Забыл написать typedef



typedef [uuid(153450BE-9F71-4193-9A00-95C58175FD8F)]
struct cJustUser {
    CHAR m_szFirstName[16];
    CHAR m_szLastName[16];
    CHAR m_szMailAsdress[64];
    CHAR m_szPhone[16];
    CHAR m_szAddress[64];
    SHORT m_nPermission;
    
}cJustUser;


не уверен будет ли это работать: CHAR m_szAddress[64];
я использовал BSTR

_>// IMServer

_>[
_> object,
_> uuid("FE45D72B-465A-4B2D-A7BE-1349EBDEBB0E"),
_> dual, helpstring("IMServer Interface"),
_> pointer_default(unique)
_>]
_>__interface IMServer : IDispatch
_>{
_> [id(1), helpstring("method GetMail")] HRESULT GetMail([in] VARIANT* pVal);
_> [id(2), helpstring("method SendMail")] HRESULT SendMail([in] VARIANT* pVal);
_> [id(3), helpstring("method AddUser")] HRESULT AddUser([in, satype(struct cJustUser)] SAFEARRAY * pVal);
_>};


Я бы написал так:

[id(3), helpstring("method AddUser")] HRESULT AddUser([in] SAFEARRAY(cJustUser) pVal);

С++
STDMETHOD(AddUser)(SAFEARRAY * pVal);


Так покрайней мере в VC6 копилится и работает
Re[2]: Передача массива структур в VC.Net
От: serge_ Украина  
Дата: 08.09.03 07:41
Оценка:
Здравствуйте, andrey rygin, Вы писали:

AR>Здравствуйте, serge_, Вы писали:


_>>Простите может повторюсь неоднократно, но то что раньше писалось почему то не работает,

_>>при компиляции выдаёт ошибки:

_>>[uuid(153450BE-9F71-4193-9A00-95C58175FD8F)]

_>>struct cJustUser {
_>> CHAR m_szFirstName[16];
_>> CHAR m_szLastName[16];
_>> CHAR m_szMailAsdress[64];
_>> CHAR m_szPhone[16];
_>> CHAR m_szAddress[64];
_>> SHORT m_nPermission;

_>>}cJustUser;


AR>Забыл написать typedef



AR>

AR>typedef [uuid(153450BE-9F71-4193-9A00-95C58175FD8F)]
AR>struct cJustUser {
AR>    CHAR m_szFirstName[16];
AR>    CHAR m_szLastName[16];
AR>    CHAR m_szMailAsdress[64];
AR>    CHAR m_szPhone[16];
AR>    CHAR m_szAddress[64];
AR>    SHORT m_nPermission;
    
AR>}cJustUser;


AR>


AR>не уверен будет ли это работать: CHAR m_szAddress[64];

AR>я использовал BSTR

_>>// IMServer

_>>[
_>> object,
_>> uuid("FE45D72B-465A-4B2D-A7BE-1349EBDEBB0E"),
_>> dual, helpstring("IMServer Interface"),
_>> pointer_default(unique)
_>>]
_>>__interface IMServer : IDispatch
_>>{
_>> [id(1), helpstring("method GetMail")] HRESULT GetMail([in] VARIANT* pVal);
_>> [id(2), helpstring("method SendMail")] HRESULT SendMail([in] VARIANT* pVal);
_>> [id(3), helpstring("method AddUser")] HRESULT AddUser([in, satype(struct cJustUser)] SAFEARRAY * pVal);
_>>};


AR>Я бы написал так:


AR>
AR>[id(3), helpstring("method AddUser")] HRESULT AddUser([in] SAFEARRAY(cJustUser) pVal);

AR>С++
AR>STDMETHOD(AddUser)(SAFEARRAY * pVal);
AR>


AR>Так покрайней мере в VC6 копилится и работает


Отож, если бы оно работало...
В VC.Net так не работает, проверянно...
Может вообще нельзя такое в .Net сделать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.