DLL中的Rtaudio使程序无响应 我想在C++中制作一个DLL,它可以把声音传到扬声器,我可以从Visual Basic程序调用。通过VB程序创建dll并调用其函数是可行的。但是,只要我在DLL中声明Rtaudio对象,它就会使Visual Basic程序无响应(并且没有声音)。如果我在控制台应用程序项目中使用完全相同的代码,而不是在DLL中使用相同的代码,那么一切都会正常工作,我会听到声音。由于我在DLL编程方面缺乏经验,我完全不知道是什么导致了这样的问题。你能给我一些提示吗

DLL中的Rtaudio使程序无响应 我想在C++中制作一个DLL,它可以把声音传到扬声器,我可以从Visual Basic程序调用。通过VB程序创建dll并调用其函数是可行的。但是,只要我在DLL中声明Rtaudio对象,它就会使Visual Basic程序无响应(并且没有声音)。如果我在控制台应用程序项目中使用完全相同的代码,而不是在DLL中使用相同的代码,那么一切都会正常工作,我会听到声音。由于我在DLL编程方面缺乏经验,我完全不知道是什么导致了这样的问题。你能给我一些提示吗,c++,vb.net,audio,dll,C++,Vb.net,Audio,Dll,这是我代码的一部分。它仍然会产生同样的问题: 动态链接库: 这是VB示例代码: Public Class Form1 Private Declare Function getNumber Lib "AudioDll1.dll" () As Integer Dim myNum As Integer Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load La

这是我代码的一部分。它仍然会产生同样的问题: 动态链接库:

这是VB示例代码:

Public Class Form1
    Private Declare Function getNumber Lib "AudioDll1.dll" () As Integer

    Dim myNum As Integer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Label1.Text = 10

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = 1
        myNum = getNumber()
        Label1.Text = 2
        Label1.Text = myNum
    End Sub
End Class
正如我所说,唯一的问题是

RtAudio dac;
我试着在本地声明它,把它放在一个线程中,等等。没有任何效果。但是,如果我只是创建一个win32控制台应用程序,包含相同的头文件,链接相同的库,那么一切都很好。以下是我链接到的LIB:

dsound.lib
rtaudiolib.lib
kernel32.lib
user32.lib
advapi32.lib
ole32.lib
我不从父项或项目默认值继承

哦,我知道即使它能工作,使用上面的代码我也听不到声音。正如我所说的,我试图删除部分代码以发现问题。和RtAudio dac;这是导致它的全部原因

编辑:我还应该补充,rtaudiolib.lib是一个静态库,我使用Rtaudio 4.0.12代码制作而成

#define __WINDOWS_DS__ 
#define __WINDOWS_ASIO__
我将非常感谢任何帮助


致以最诚挚的问候

RtAudio构造函数正在调用RtApiDs::getDeviceCount(),而RtApiDs::getDeviceCount()又在调用DirectSoundEnumerate(),这是dsound.dll的一个函数

我总是在DLL_进程_附加期间(或者在全局空间中,这似乎会导致相同的问题)尝试声明RtAudio对象

Microsoft声明在DLL\u进程\u附加期间不应加载其他库

入口点函数应仅执行简单的初始化或 终止任务。它不能调用LoadLibrary或LoadLibraryEx 函数(或调用这些函数的函数),因为 按DLL加载顺序创建依赖项循环。这可能会导致 在系统执行其初始化代码之前使用的DLL。 类似地,入口点函数不能调用FreeLibrary 进程中的函数(或调用FreeLibrary的函数) 终止,因为这可能导致在 系统已执行其终止代码

因此,我决定不在DLL_进程_ATTACH中执行任何操作,并为我的DLL提供一个单独的自定义init()函数。这解决了所有问题

dsound.lib
rtaudiolib.lib
kernel32.lib
user32.lib
advapi32.lib
ole32.lib
#define __WINDOWS_DS__ 
#define __WINDOWS_ASIO__