Solved

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

Posted on 2000-04-25
6
449 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

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

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

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

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
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…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
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…
Suggested Courses
Course of the Month10 days, 19 hours left to enroll

628 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