Delphi - una para EXPERTOS, arrays y comunicacion OLE

 
Vista:

una para EXPERTOS, arrays y comunicacion OLE

Publicado por Fajardo (99 intervenciones) el 23/08/2002 16:26:47
Hola!

Utilizo Delphi 6 enterprise, Windows 98 y cliente de Lotus Notes 4.6

Tengo un ejemplo en Visual Basic para enviar correo a travéz de Lotus Notes.

A como dios me dio entender, traducí esto a Delphi, todo funciona bien excepto por algo.

En una parte del codigo, es necesario especificar a quien va dirigido el correo, la documentacion de Lotus Notes indica que puede ser una cadena o un arreglo de cadenas. En el codigo de Visual Basic tambien se especifica si es una cadena o un arreglo de tipo variant.

En delphi, si pongo una variable tipo cadena, funciona, pero si pongo un arreglo, me indica el siguiente error:

Type not allowed in Variant Dispatch call

Segun la documentacion de Delphi esto significa que el compilador no sabe como traducir mi arreglo, pero entonces, en comunicacion OLE como envio un arreglo como parametro?

Ejemplo de codigo que SI funciona

var
sNombre:string;

begin
sNombre:='[email protected]';

Session := CreateOleObject('Notes.NotesSession');
UserName := Session.UserName;
Maildb := Session.GetDatabase('','');
If Not (Maildb.IsOpen) Then Maildb.OpenMail;

MailDoc := Maildb.CreateDocument;
MailDoc.Form := 'Memo';
MailDoc.Logo := 'StdNotesLtr34';
MailDoc.from := UserName;
MailDoc.Subject := 'Prueba de Fajardo, favor de borrar';

MailDoc.Body := 'Esto es solo una prueba, borrar este correo';

MailDoc.Send(false,sNombre);
end;

Prueba que marca el error de
'Type not allowed in Variant Dispatch call'

var
asNombre:array [1..2] of string;

begin
asNombre[1]:='[email protected]';
asNombre[2]:='[email protected]';

Session := CreateOleObject('Notes.NotesSession');
UserName := Session.UserName;
Maildb := Session.GetDatabase('','');
If Not (Maildb.IsOpen) Then Maildb.OpenMail;

MailDoc := Maildb.CreateDocument;
MailDoc.Form := 'Memo';
MailDoc.Logo := 'StdNotesLtr34';
MailDoc.from := UserName;
MailDoc.Subject := 'Prueba de Fajardo, favor de borrar';

MailDoc.Body := 'Esto es solo una prueba, borrar este correo';

MailDoc.Send(false,asNombre);
end;

Aqui aparece el error y no ejecuta el programa. Repito, la documentacion de Lotus Notes dice que puede ser una cadena o un arreglo de cadenas y el ejemplo de VisualBasic asi lo trata tambien.

Ya probe con

asNombre:array [1..2] of olevariant;

pero aparece el mismo error.

Se agradece ualquier ayuda para corregir esto.

Saludos
Fajardo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:una para EXPERTOS, arrays y comunicacion OLE

Publicado por Diego Romero (636 intervenciones) el 23/08/2002 23:47:59
Nunca trabajé con OLE pero tengo entendido que el tipo estandar para pasar parámetros es el Variant y por lo que entiendo cuando le pasas solo un string Delphi automáticamente le cambia el tipo de String a Variant pero cuando declaras un tipo definido como es Array of string Delphi no puede o no sabe cómo convertir esto a Variant, por lo que me parece que deberías hacer es un array de variant directamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

nop, no 'junciona'

Publicado por Fajardo (99 intervenciones) el 24/08/2002 20:41:04
Hola!
Intenté con un arreglo de variant y me indica el mismo error.

Saludos
Fajardo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

una para EXPERTOS, arrays y comunicacion OLE

Publicado por salvador fajardo (1 intervención) el 19/06/2017 23:01:15
Ya encontré la solución despues de 15 años

Funciona con Delphi XE6 y Lotus Notes Client 9 ( Julio 2017)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Unit ComObj;
 
 
var
 names1:OleVariant;
 
Begin
  names1:=   VarArrayCreate([0, 2], varVariant);
  names1[0] := 'salvador.fajardo@zoho.com';
  names1[1] := 'salvador.fajardo@hutchinsonna.com';
  names1[2] := 'ing_sfp@yahoo.com';
 
 
...bla bla bla....
 
  MailDoc := Database.CREATEDOCUMENT;
  MailDoc.ReplaceItemValue('Form', 'MEMO');
  MailDoc.ReplaceItemValue('Subject', 'Subject');
  MailDoc.ReplaceItemValue('SendTo', names1);
  MailDoc.send(0);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar