Link to home
Start Free TrialLog in
Avatar of questfar
questfar

asked on

Calling an api sub

I've asked this before and thought I was given enough info to resolve my problem , what am I doing wrong??. I have other calls to the dll that are functions that work. It's the sub that fails.

Code is in an agent

Here is parts of the code

First my declaration:

Declare Sub Get_Noise Lib "C:\Bits\Raffles\SG100\SG100\ISAF_N1.dll" Alias "_Get_Noise_std@16" (Byte_PTR as String , Byval Bytes As Long,  Byval Error_Code As Long, Byval Exception As Long)

Dim gstr as string
gstr=Space(8)
ErrorCode=1
Exception=1
Call Get_Noise(gstr,1,ErrorCode, Exception)

When the Call executes , the app crashes, so I'm sending wrong info to the dll. I've tried all sotrs of variations to no avail. Below is the only documentation I have for this dll. Addionally , what does the asterisk signify in the first line?
********************************************************
void Get_Noise( uchar *Byte_PTR, ulong Bytes, ulong *Error_Code, ulong
*Exception);
The call returns a string, of specified length, of random bytes, to
memory buffer at address Byte_PTR.

File Type: DLL

         Section contains the following Exports for ISAF_N1.DLL

                   0 characteristics
            3EADF853 time date stamp Tue Apr 29 03:58:11 2003
                 0.0 version
                   1 base
                  10 # functions
                  10 # names

            ordinal hint   name

                  1    0   DLL_Setup  (00001460)
                  3    1   Get_Noise  (000023b0)
                  4    2   Get_Noise_Ex  (000027f0)
                  7    3   Init_Noise_Thread  (000013a0)
                  8    4   Insert_Ciphertext  (00002b50)
                  9    5   Insert_Noise  (000019e0)
                  A    6   Release_UpdateLock  (00002d30)
                  C    7   SG100_Password  (00002f70)
                  E    8   SG100_Random  (00002e60)
                 10    9   Set_Status_Noise_Thread  (00001610)
                  2    A   _DLL_Setup_std@8  (00001440)
                  5    B   _Get_Noise_Ex_std@20  (000027c0)
                  6    C   _Get_Noise_std@16  (00002390)
                  B    D   _Release_UpdateLock_std@8  (00002d10)
                  D    E   _SG100_Password_std@16  (00002f50)
                  F    F   _SG100_Random_std@12  (00002e40)

     Summary

        2000 .bss
        2000 .data
        1000 .edata
        1000 .idata
        1000 .rdata
        1000 .reloc
        1000 .rsrc
        1000 .sdata
        6000 .text
********************************************************
ASKER CERTIFIED SOLUTION
Avatar of mbonaci
mbonaci
Flag of Croatia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
questfar,
if something is pointer that means it cannot be sent byval (you're sending the copy of the object where the four byte pointer on an object is expected).

Hope this helps,
Marko
SOLUTION
Avatar of Sjef Bosman
Sjef Bosman
Flag of France image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
See the Designer Help database:
    "Passing arguments to C functions"  
And, as I said, byVal (or "by value") means that the copy of the object is sent to the function, not the reference (memory location pointer) to that object.


Marko
questfar,

I think you need to "play" a little with params:
https://www.experts-exchange.com/questions/20702748/API-call-to-create-full-text-index-crashes-the-server.html

Hope this helps,
Marko
Avatar of questfar
questfar

ASKER

I've resolved the problem. The declaration was using byval in the Error_code and Exception, Romoving ByVal resolved problem

I'll give 50 point for the answers posted

Thanks
questfar,
what?

this is from my second post:

> if something is pointer that means it cannot be sent byval (you're sending the copy of the object where the four byte pointer on an object is expected).


Hope this helps,
Marko
Please read https://www.experts-exchange.com/help.jsp#hi73 for how to grade a question. A <C> is out of the question, even a <B> isn't enough. You got good assistance from both of us. Would you be so kind to reconsider your grading?
questfar,
and why did you give grade C ???

:(

Marko
I'll regrade. The answers didn't assist me in resolving the issue. I resolved it from info elsewhere. But I read the guidelines and it makes to regrade.

Thanks for the quick responses

Orlando