WINCC6.2
#include "apdefap.h"int gscAction( void )
{
#pragma option(mbcs)
static BOOL QRR = TRUE;
#pragma code("winmm.dll")
void WINAPI PlaySoundA(char*pszSound,char*hmode,DWORD dwFlag);
#pragma code()
if(QRR)
{
PlaySoundA("c:\\Alarm03.wav", NULL, 3);
}
else
{
PlaySoundA("c:\\Alarm04.wav", NULL, 1);
}
return 0;
}
这个WINCC脚本的含义
这个WINCC脚本定义了一个名为"gscAction"的函数,其作用是播放两种不同的警报声音。如果QRR变量的值为TRUE,则播放"c:\Alarm03.wav"文件;否则,播放"c:\Alarm04.wav"文件。这里使用了Winmm.dll库中的PlaySoundA函数来实现播放音乐的功能。该函数的第一个参数指定音乐文件的路径,第二个参数为NULL表示默认使用Windows自带的声音设备,第三个参数为播放标志,3表示同时播放多个声音文件。最后,该函数返回0表示执行成功。 使用并修改此函数实现如下功能:
QRR变量的值为TRUE,则播放"c:\Alarm03.wav"文件;
QRR变量的值为false;则不播放。 这般难离舍 发表于 2023-04-17 09:41
使用并修改此函数实现如下功能:
QRR变量的值为TRUE, ...
#include "apdefap.h"
int gscAction( void ){
#pragma option(mbcs)
static BOOL QRR = TRUE;
if(QRR) {
PlaySoundA("c:\\Alarm03.wav", NULL, 3);
}
return 0;
}
int main() {
QRR = false;
gscAction();
return 0;
}
//这里假设main函数在代码中调用gscAction函数进行播放控制
//修改后的代码如下:
#include "apdefap.h"
int gscAction(BOOL QRR){
#pragma option(mbcs)
if(QRR) {
PlaySoundA("c:\\Alarm03.wav", NULL, 3);
}
return 0;
}
int main() {
BOOL QRR = TRUE;
gscAction(QRR); //播放警报声音
QRR = false;
gscAction(QRR); //不播放警报声音
return 0;
}
//使用gscAction函数来控制是否播放警报声音 #include "apdefap.h"
int gscAction(BOOL QRR)
{
#pragma option(mbcs)
if(QRR) {
PlaySoundA("c:\\Alarm03.wav", NULL, 3);
}
return 0;
}
int main()
{
BOOL QRR = TRUE;
gscAction(QRR);
QRR = false;
gscAction(QRR);
return 0;
}
这样编译后 出错
line 7 :error (003f) : undefined identifier 'playsoundA'
line 7 :error (0066) : 'playsoundA' is not a function
line 17 :error (003f) :undefined identifier 'false' 这般难离舍 发表于 2023-04-17 09:48
#include "apdefap.h"
int gscAction(BOOL QRR)
{
...
这个错误表明PlaySoundA函数没有被正确地定义。可以尝试在头文件中添加对winmm库的引用,以保证该函数能够被正确地链接。
请尝试将以下代码添加到文件开头,以添加winmm库的引用:
++
#pragma comment(lib, "winmm.lib")
此外,第17行有一个语法错误。您需要将“false”改为“FALSE”,因为BOOL类型只接受TRUE和FALSE作为其值。 #include "apdefap.h"
int gscAction(BOOL QRR)
{
#pragma option(mbcs)
#pragma code("winmm.dll")
if(QRR) {
PlaySoundA("c:\\Alarm03.wav", NULL, 3);
}
return 0;
}
int main()
{
BOOL QRR = TRUE;
gscAction(QRR);
QRR = FALSE;
gscAction(QRR);
return 0;
}
编译出错:
line 8 :error (003f) : undefined identifier 'playsoundA'
line 8 :error (0066) : 'playsoundA' is not a function 这般难离舍 发表于 2023-04-17 10:00
#include "apdefap.h"
int gscAction(BOOL QRR)
{
...
请尝试加上相应的头文件包含语句#include <Windows.h>来确保PlaySoundA函数的定义被正确地包含。同时,你需要将#pragma code("winmm.dll")和#pragma code()的语句之间的代码转移到函数内部,在需要用到的时候再动态调用该代码库中的函数。例如:#include "apdefap.h"#include <Windows.h>//添加头文件int gscAction(BOOL QRR){ if(QRR) { //在需要时动态加载winmm.dll库 HMODULE hmodule = LoadLibrary("winmm.dll"); if (hmodule) { typedef void (WINAPI *pPlaySoundA)(LPCSTR, HMODULE, DWORD); pPlaySoundA PlaySoundAFunc = (pPlaySoundA)GetProcAddress(hmodule, "PlaySoundA"); if (PlaySoundAFunc) { PlaySoundAFunc("c:\\Alarm03.wav", NULL, 3); } FreeLibrary(hmodule); } } return 0;}int main() { BOOL QRR = TRUE; gscAction(QRR); QRR = FALSE; gscAction(QRR); return 0;} 修改后的完整代码可以条例清晰的写一下吗 这般难离舍 发表于 2023-04-17 10:01
修改后的完整代码可以条例清晰的写一下吗 ...
是的,以下是您所需的完整代码:
#include "apdefap.h"
#include <Windows.h>
// 添加头文件和相应的函数定义
typedef void (WINAPI *pPlaySoundA)(LPCSTR, HMODULE, DWORD);
#pragma comment(lib, "winmm.lib")
int gscAction(BOOL QRR)
{
if(QRR)
{
// 在需要时动态加载 winmm.dll 库
HMODULE hmodule = LoadLibrary("winmm.dll");
if (hmodule)
{
pPlaySoundA PlaySoundAFunc = (pPlaySoundA)GetProcAddress(hmodule, "PlaySoundA");
if (PlaySoundAFunc)
{
PlaySoundAFunc("c:\\Alarm03.wav", NULL, 3);
}
FreeLibrary(hmodule);
}
}
return 0;
}
int main()
{
BOOL QRR = TRUE;
gscAction(QRR); // 播放警报声音
QRR = FALSE;
gscAction(QRR); // 不播放警报声音
return 0;
}
页:
[1]
2