【发布时间】:2017-04-19 07:08:34
【问题描述】:
我正在尝试从 VB6 中调用 C++ COM DLL。
C++ 代码是:
STDMETHODIMP CSonic::sonicChangeShortSpeed(
SHORT* samples,
LONG *numSamples,
FLOAT speed,
FLOAT pitch,
FLOAT rate,
FLOAT volume,
LONG useChordPitch,
LONG sampleRate,
LONG numChannels
)
我在 VB6 中这样称呼它:
Private Declare Function sonicChangeShortSpeed Lib "SonicLIB.dll" Alias "#1" (
ByRef samples As Integer,
ByRef numSamples As Long,
ByVal speed As Double,
ByVal pitch As Double,
ByVal rate As Double,
ByVal volume As Double,
ByVal useChordPitch As Long,
ByVal sampleRate As Long,
ByVal numChannels As Long)
As Long
在我的代码中,我使用:
Dim nIntegers() As Integer
ReDim nIntegers(2047)
Dim lSamples As Long
Dim dblSpeed As Double
Dim dblPitch As Double
Dim dblRate As Double
Dim dblVol As Double
Dim lUseChordPitch As Long
Dim lSampleRate As Long
Dim lNumChannels As Long
lSamples = 2048
dblSpeed = 0.5
dblPitch = 0
dblRate = 1
dblVol = 1
lUseChordPitch = 1
lSampleRate = 48000
lNumChannels = 1
Dim lRet As Long
lRet = sonicChangeShortSpeed(nIntegers(0), lSamples, dblSpeed, dblPitch, dblRate, dblVol, lUseChordPitch, lSampleRate, lNumChannels)
最后一行产生“错误的调用约定”错误。
有人看到我的错误吗?
谢谢!
【问题讨论】:
-
您没有使用 COM 调用 COM dll。
-
@Noodles 请问这是什么意思?
-
这是一个 COM 调用。
Set X = CreateObject("Application.Object"): msgbox x.sonicChangeShortSpeed(nIntegers(0), lSamples, dblSpeed, dblPitch, dblRate, dblVol, lUseChordPitch, lSampleRate, lNumChannels) -
听起来不错,谢谢。你认为这就是答案吗?
-
我找不到该库作为 COM 库。 Unix 没有 COM,这似乎是它的根源。那么为什么你认为它是一个 COM dll?