2013-09-21 2 views
-1

C++ VS2010에서 DLL을 만들었습니다.C++ : DLL을 여러 프로세스가 동시에 액세스 할 수있게 만들기

2 개의 프로그램이 동시에 액세스 할 수없는 것처럼 보입니다. 첫 번째 프로그램 1은 DLL에 대한 호출을 완료해야합니다. 그러면 DLL 만 다른 프로그램의 호출을 처리합니다.

DLL을 "멀티 스레드"로 설정해야하는 프로젝트 설정에 특정 스위치가 있는지 알고 싶습니다.

DLL은 Windows SAPI에서 사용됩니다. 프로그램 (내 경우 두 개의 프로그램)은 SAPI를 참조하고 컴퓨터 음성 (컴퓨터 음성은 DLL 임)을 만들 수 있습니다. 두 프로그램이 동시에 대화 할 것을 기대했지만, 서로 기다리지는 못하기 때문에 DLL이 단일 스레드 일 것을 기대했습니다.

감사합니다.

+3

현재 수행중인 작업에 대해 자세히 알려주시겠습니까? 두 프로그램이 동시에 같은 DLL을 사용할 수없는 이유가 없어야합니다. 각각은 DLL을 자체 메모리 공간에로드하고 독립적으로 코드를 실행합니다. 최신 OS에서는 어느 프로세스도 다른 프로세스에 대한 지식이나 액세스를 갖지 않습니다. –

+0

전능하신 것처럼 묘사 될 수있는 이유가 있습니다. 로더 잠금 장치를 잡고있는 동안 많은 것들을 할 수 있습니다. 또한 명명 된 이벤트 또는 다른 동기화 프리미티브에서 동기화 될 수도 있습니다. 우리는 주어진 정보를 알 방법이 없습니다. 하지만 내 돈은 로더 잠금 장치에 있습니다. –

+0

@MicahCaldwell DLL은 Windows SAPI에서 사용됩니다. 프로그램 (내 경우에는 두 개의 프로그램) SAPI를 참조하고 컴퓨터 음성 (내 경우 DLL) 뭔가를 할 수 있습니다. 두 프로그램이 동시에 대화 할 것을 기대했지만, 서로 기다리지는 못하기 때문에 DLL이 단일 스레드 일 것을 기대했습니다. – tmighty

답변

4

음성 API는 여러 소스의 음성을 동시에 재생할 수 있도록 직렬화합니다. 재생할 보류중인 음성이 없어 질 때까지 먼저 재생되고, 다음 재생됩니다. 여기에 설명 된대로 레지스트리를 통해이 문제를 비활성화 할 수 있습니다 http://msdn.microsoft.com/en-us/library/ee431801(v=vs.85).aspx#_Toc494873956

특히 <AudioOutput1>이 오디오 출력 장치의 이름입니다 HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Speech\AudioOutput\<AudioOutput1>\AttributesNoSerializeAccess 값.

이 정보

동시에 말하기에서 여러 TTS 음성 또는 엔진을 방지하기 위해 http://msdn.microsoft.com/en-us/library/speechplatform_ispaudio.aspx

에서 찾을 수 있습니다, 음성 플랫폼은 ISpAudio 인터페이스를 구현하는 객체에 출력을 직렬화. ISpAudio 개체에 대한 출력의 serialization을 사용하지 않도록 설정하려면 개체 토큰의 특성 폴더에 "NoSerializeAccess"라는 특성을 배치합니다.

관련 문제