Solved

How to call a Win32 dll function with BSTR parameter from VB

Posted on 2000-04-25
6
436 Views
Last Modified: 2008-03-10
How do I call a function residing in a Win32 dll(developed using VC++) which takes a BSTR as a parameter ?
The function prototype in VC++ is as follows
***************************************
extern "C"
PRESENTATION_API void __stdcall Sample(BSTR sName);
***************************************

I tried calling the function in VB using the following declaration.
***************************************
Private Declare Sub Sample Lib "presentation" Alias "_Sample@4" (ByVal sName As String)
***************************************

I didnot succeed in my attempt. However, if I change my function parameter in VC++ to a variant, I could successfully call the same from VB with a small modification to the function declaration.
0
Comment
Question by:vasantha
6 Comments
 
LVL 28

Expert Comment

by:AzraSound
ID: 2750167
http://www.vb-helper.com/Howto/vcdll.zip
http://www.rdrop.com/~cary/program/mixed_language.html


two things you might want to check out regarding creating vc++ dlls for use with vb

0
 
LVL 32

Accepted Solution

by:
Erick37 earned 50 total points
ID: 2751435
"HOWTO: Pass a String Between Visual Basic and Your C DLL"

http://support.microsoft.com/support/kb/articles/Q187/9/12.ASP
0
 
LVL 4

Expert Comment

by:CraigLazar
ID: 2752132
Hi
in c use the bstring function like this

#include "comutil.h"
    BSTR mess;
 mess = _com_util::ConvertStringToBSTR("Step - This is also funky!");
        IDoug->DougThis (&mess);
        CoTaskMemFree (mess);
       
        url = _com_util::ConvertStringToBSTR ("http://www.microsoft.com");
        IDoug->gothere (&url);
        CoTaskMemFree(url);

this works when passing a c string to my vb activex dll or exe

hope it helps

craig
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 

Author Comment

by:vasantha
ID: 2753912
As mentioned in the article 12.ASP(thanks to Eric37), a BSTR string will be automatically be converted to plain ASCII while passing the same from VB to a C dll. Does it mean that I will not be able to accept a string from VB as a BSTR in a C dll ?
0
 
LVL 4

Expert Comment

by:CraigLazar
ID: 2755313
as far as i know u can go from vb to c using the opposite function
ConvertBstrtoString

:)

Craig
0
 

Author Comment

by:vasantha
ID: 2791140
From the article that Erick has suggested, I understand that a BSTR string from VB is automatically converted to ASCII string when sent to a C dll. So, I have modified my VC dll function to accept a LPSTR.

Thanks Erick for the suggestion.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question