Re: Передача массива структур в VC.Net
Здравствуйте, 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
Здравствуйте, 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 сделать?
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить