Solved

Calling a C++ dll with ColdFusion, ColdFusion cannot pass pointers as required

Posted on 2007-12-05
12
638 Views
Last Modified: 2013-12-20
We have an existing C++ dll for processing data the has been used for a few years in our products. We are not develolping a web based SAAS version of our product, and need to integrate ColdFusion in with the .dll. The trouble is the C++ dll expects an array of data, passed as a pointer to the start of the array, but ColdFusion cannot deal with pointers.
The dll function prototype is
void SpeechAnalyseRT::storeAndAnalyseChunk(short int* data, unsigned long dataLength)
and has virtual function
virtual void CALL storeAndAnalyseChunk(short int* data, unsigned long dataLength) = 0;
How do we change this to pass by value? it has been suggested that we use a struct with an array inside. What is the syntax to make this work, i.e. declaring the struct etc?
Is this the right thing to do?
Thanks
Thor

0
Comment
Question by:ThorRussell
  • 6
  • 2
  • 2
12 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 20417014
The easiest way would be to pass an array of size 1:

data Data;

// fill struct

storeAndAnalyseChunk(&Data,1);
0
 
LVL 86

Expert Comment

by:jkr
ID: 20417017
...or

data Data[1];

// fill struct

storeAndAnalyseChunk(Data,1);

respectively.
0
 
LVL 86

Expert Comment

by:jkr
ID: 20417020
um, make the last one
data Data[1];

// fill struct
Data[0].nSampleMember = 42;

storeAndAnalyseChunk(Data,1);
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 

Author Comment

by:ThorRussell
ID: 20417231
The array needs to be of size somewhere between 44,100 to 441,000 size 1 definitely wont do!
0
 
LVL 86

Expert Comment

by:jkr
ID: 20417268
If you cannot supply such aq range, there definitely is a problem... a conceptional one. Pointers and arrays are interchangeable in C/C++, so you should be fine with both. Changing an existing function is out of question, unfortunately.
0
 

Author Comment

by:ThorRussell
ID: 20423136
Are you trying to say it cant be done? There must be a way to let coldfusion call a C++ dll.
What do you mean by changing an existing function is out of the question? The dll is mine, so I can change it how I like. I want it to accept the array by value rather than pointer.
0
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 20423624
Well, if you are creating the DLL you can of course change anything you want. But in C/C++, array *are* in fact pointers to the 1st element in the array, and that is something which is going to be hard to change.
0
 
LVL 36

Expert Comment

by:SidFishes
ID: 20428782
"There must be a way to let coldfusion call a C++ dll. "

i'm not familiar with the internals of c++ but i do know how to use them with cf...

just register a cfx custom tag

cfadmin -> cfx tags -> Register C++ CFX -> name tag cfx_yourDLLName -> choose path to dll

note that if your dll is called foo you need to name the tag cfx_foo

then call the dll like so

<cfx_foo expectedInputparameter1="#somevar1#"
              expectedInputparameter2="#somevar2#">

then the output would be something like

<cfoutput>
#outputParamStuct.outputParam1#
</cfoutput>  

where outputParamStruct is the struct containing value or values returned by the dll and outputParam1 is the value itself.




0
 
LVL 36

Expert Comment

by:SidFishes
ID: 20428797
"note that if your dll is called foo you need to name the tag cfx_foo"

to be more specific

note that if your dll is called FOO.DLL you need to name the tag CFX_FOO (no extension)
0
 
LVL 86

Expert Comment

by:jkr
ID: 25397274
I'd say http:#20423624 clears up the issue, so I tend to object to a delete.
0

Featured Post

Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

Question has a verified solution.

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

Introduction In this tutorial, I'll explain how to create an animated progress meter in a wireframe prototype developed using Axure RP 7.0 - a leading prototyping tool for designing web sites and software. (For more information about Axure and gett…
If you don't have the right permissions set for your WordPress location in IIS, you won't be able to perform automatic updates. Here's how to fix the problem.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

821 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