We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Calling an api sub

questfar
questfar asked
on
Medium Priority
391 Views
Last Modified: 2013-12-18
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
********************************************************
Comment
Watch Question

Commented:
Hi questfar,
* means that it is a pointer to the variable of that type (uchar* - pointer on unsigned char)

Hope this helps,
Marko

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Commented:
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
Sjef BosmanGroupware Consultant
CERTIFIED EXPERT
Commented:
ByVal means that a parameter is passed by value. I think you need a different specification, like:

    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,  Error_Code As Long, Exception As Long)

I have to check about the string, I'll be bakk...
Sjef BosmanGroupware Consultant
CERTIFIED EXPERT

Commented:
See the Designer Help database:
    "Passing arguments to C functions"  

Commented:
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

Commented:
questfar,

I think you need to "play" a little with params:
http://www.experts-exchange.com/Applications/Email/Lotus_Notes_Domino/Q_20702748.html

Hope this helps,
Marko

Author

Commented:
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

Commented:
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
Sjef BosmanGroupware Consultant
CERTIFIED EXPERT

Commented:
Please read http://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?

Commented:
questfar,
and why did you give grade C ???

:(

Marko

Author

Commented:
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
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.