SafeArray Locked error - WeOnlyDo Discussion board

SafeArray Locked error (General questions)

by forthyen, Monday, January 14, 2008, 17:25 (6158 days ago)

Hi, I use delphi7 and call SendData in wodVPN.dll then get SafeArray Locked error but not in wodVPN.ocx. Why?

Re: SafeArray Locked error

by woddrazen, Monday, January 14, 2008, 17:52 (6158 days ago) @ forthyen

Hi forthyen,


I cannot duplicate your problem. Did you maybe try with our sample for Delphi 7? You can find it in wodVPN Samples folder.

Also please make sure that you are using latest 1.2.1.43 version of wodVPN.

You can check version in wodVPN Version Property.

[code]ShowMessage(wodVPN1.Version);[/code]
Let us know how it goes.


Regards,
Drazen

Re: SafeArray Locked error

by forthyen, Tuesday, January 15, 2008, 02:31 (6157 days ago) @ woddrazen

Yes, I get 1.2.1.43 and modify it as follows. Is it DEPLHI7's problem ? I use delphi 7.0(build 4.453). Is this code error ? Would you please check it ? Thanks!

procedure TForm1.Button4Click(Sender: TObject);
var psaiNew : PSafeArray;
aDim : array [0..0] of TSafeArrayBound;
arraydata : Pointer;
v : Variant;
n : integer;
data : pointer;
buf : array [1..1024] of char;
begin
ShowMessage(wodVPN1.Version);
data := @buf;
n := 500;
aDim[0].lLbound := 1;
aDim[0].cElements := n;
psaiNew := SafeArrayCreate(VT_UI1, 1, aDim);
psaiNew.cLocks := 0;
if psaiNew <> nil then begin
SafeArrayAccessData(psaiNew, arraydata);
Move(data^,arraydata^,n);
SafeArrayUnaccessData(psaiNew);
TVariantArg(v).vt := VT_ARRAY or VT_UI1;
TVariantArg(v).parray := psaiNew;
wodVPN1.SendData(v, FALSE); // not reliable
end;

// wodVPN1.SendText(Edit5.Text, True);
end;

Re: SafeArray Locked error

by wodSupport, Tuesday, January 15, 2008, 02:34 (6157 days ago) @ forthyen

Thanks, we will check it out. Can you just tell me exactly on which line error occurs? In wodVPN or in your code? If in your code, where?

Kreso

Re: SafeArray Locked error

by forthyen, Tuesday, January 15, 2008, 03:57 (6157 days ago) @ wodSupport

at
wodVPN1.SendData(v, FALSE); // not reliable

and get

Project Project1.exe raised exception class EVariantArrayLockedError with message 'Variant or safe array is locked'. Process stopped. Use Step or Run to continue.


[image]

Thanks!

Re: SafeArray Locked error

by woddrazen, Tuesday, January 15, 2008, 08:49 (6157 days ago) @ forthyen

Hi,


I think I was able to duplicate the issue.

I will now transfer this ticket to our developers to see if they can do the same in debug mode, and determine why this happens. You should get reply from them during the day.


Drazen

Re: SafeArray Locked error

by forthyen, Tuesday, January 15, 2008, 08:54 (6157 days ago) @ woddrazen

Hi,

Thanks you very much! I hope this problem can be solved.

Re: SafeArray Locked error

by wodDamir, Tuesday, January 15, 2008, 16:48 (6157 days ago) @ forthyen

Hi,

I believe this is now fixed. Can you please download the latest version and try it out?

Also, you can try the following code (instead of yours):

[code]procedure TForm1.Button4Click(Sender: TObject);
var arraydata : Pointer;
v : Variant;
n : integer;
data : pointer;
buf : array [1..1024] of char;
begin data := @buf;
n := 500;
v := VarArrayCreate([0, n-1], varByte);
arraydata := VarArrayLock(v);
Move(data^,arraydata^,n);
VarArrayUnlock(v);
wodVPN1.SendData(v, FALSE); // not reliable
VarClear(v);
end;[/code]

Regards,
Damba

Re: SafeArray Locked error

by forthyen, Tuesday, January 15, 2008, 17:13 (6157 days ago) @ wodDamir

Yes, good! Thanks !