Kendisinin makalesi şuradadır :
viewtopic.php?p=55517
Sayın FAOSoft,
Bu değerli bilgileri verdiğiniz için öncelikle size teşekkür etmek istiyorum.
Gerçi siz bu bilgileri 2004'te vermişsiniz ama benim bugün işime yaradı.
Ancak bir yerde takıldım ve bu konuda sizden yardım alabileceğimi düşünüyorum. Eminim takıldığım nokta küçük birşeydir ama ne yazık ki çözemedim henüz.
Müsaadenizle hemen anlatayım.
Bir UDF yapıyorum. Görevi mail göndermek. (Ancak sorunum mail gönderme işlemleriyle alakalı değil tabii)
Delphi PROJECT kodum bu şekilde :
Kod: Tümünü seç
library Project1;
uses
Unit1 in 'Unit1.pas';
exports
mail_gonder;
begin
end.
Kod: Tümünü seç
unit Unit1;
interface
uses ib_util,idsmtp,idmessage,forms;
function mail_gonder(var bilgi:pchar):pchar;stdcall;
implementation
function mail_gonder(var bilgi:pchar):pchar;
var
IdMsgSend:TIdMessage;
SMTP:TidSMTP;
begin
IdMsgSend:=TIdMessage.Create(application);
SMTP:=TidSMTP.Create(Application);
with IdMsgSend do
begin
Body.Add(bilgi);
From.Text := 'deneme';
ReplyTo.EMailAddresses := 'test@test.com';
Recipients.EMailAddresses := 'test@test.com';
Subject := 'BASLIK';
Priority := TIdMessagePriority(0); { Message Priority }
end;
SMTP.AuthenticationType := atLogin;
SMTP.Username:='Test_Kullanicisi';
SMTP.Password:='Test_Kullanici_Sifresi';
{General setup}
SMTP.Host := '10.10.1.8';
SMTP.Port := 25;
{now we send the message}
SMTP.Connect;
try
SMTP.Send(IdMsgSend);
finally
SMTP.Disconnect;
Result:='geriye_donus_degeri_onemli_degil';
end;
IdMsgSend.Free;
SMTP.Free;
end;
end.
Kod: Tümünü seç
DECLARE EXTERNAL FUNCTION F_MAIL_GONDER
cstring(300)
RETURNS cstring FREE_IT
ENTRY_POINT 'mail_gonder' MODULE_NAME 'project1.dll'
Evet gördüğünüz gibi bu fonksiyonun dönüş değeri önemli değil.
Ve bir BILGI isminde bir parametre alıyor ve bunu unit içinde kullanıyor.
Ancak BILGI isimli değişkeni kullandığım zaman FireBird'de database bağlantısı kopuyor. (bir memory problemi oluşuyor anladığım kadarı ile)
Bunu biraz açıklayayım :
Örneğin şu anda UNIT kodu içinde
Kod: Tümünü seç
Body.Add(bilgi);
Ancak BILGI değişkenini UNIT içinde kullanmazsam problem yok. DLL dosyam işini yapıyor ve maili de gönderiyor ama tabii ki değişkenleri kullanmaz isek yapıyor bunu.
Örneğin
Kod: Tümünü seç
Body.Add("test");
Şimdi benim problemimin "UDF - Delphi - String" problemi olduğunu zannediyorum.
Gördüğünüz gibi değişkenim PCHAR olarak tanımlı.
Aynı zamanda ib_util uses'a eklenmiş durumda ve dll ve pas dosyaları da projemin olduğu klasörde bulunuyor.
Sizce String işlemlerinin neresinde hata yapıyorum ?
Cevabınız için şimdiden teşekkürler.