存档

2009年11月 的存档

郎咸平《中国粮油:还有多少机会可以重来?》

2009年11月17日
郎咸平《中国粮油:还有多少机会可以重来?》已关闭评论

中国粮油:还有多少机会可以重来?

—-郎咸平

  这几天中国北方很多省受了雪灾,而这种天灾继续南下,范围进一步扩大。受灾的地方物价在上涨,这是天灾。

然而,不可想象的还有人祸,就是我们现在买的各种食用油,包括鲁花、金龙鱼都是外资的。我们中国粮油85%都是外资。为什么呢?因为我们在2004年的时候,已经败于美国政府和华尔街联合发动的一场大豆金融战。失败的结果就是我们现在连每天食用的油都要看华尔街的脸色行事,它看你不顺眼就抬高价格,你就得多付钱。你能不能想象连吃的油都要受人家控制,炒个荷包蛋都不容易,这年头,日子怎么过?

据史书记载,中国人在黄帝时代就开始种植大豆,中国人种植的大豆曾经比全世界其他地区种植的总量还要多。大豆过去是中国在国际市场上最具竞争力的农产品。1995年以前,中国一直是大豆净出口国;2000年中国大豆年进口量首次突破1 000万吨,成为世界上最大的大豆进口国,此后几年,中国的大豆进口额连续攀升;最近 10多年里,中国大豆产量由原来的世界第一,退居为继美国、巴西和阿根廷之后的世界第四。为什么我们国家的大豆产量十分丰富,却需要进口"洋大豆"呢?为什么国际大豆价格调整,我们的粮油价格就发生变化呢?

从2009年4月份开始到6月底,大豆价格上涨了25%。这个价格是谁拉高的?在这里我告诉各位读者,这就是以华尔街为首的国际金融炒家的所作所为。这一群人也可以简单地叫做金融资本,他们已经完全控制了我国大豆的价格。当初这个事件是怎么发生的?为什么国际大豆价格一上升,我们的粮油价格就跟着上升?

大豆危机是怎么开始的?一般来说,美国大豆的质量比我们东北黄金大豆的质量要好。根据我们的研究结果,它的出油率大概要高出1/6。而且在2003年之前美国大豆价格特别低,它的到岸价格甚至比我们东北黄金大豆便宜10%。因此一旦开放大豆进口,东北黄金大豆就将被洗劫一空,完全没有生存的可能。这场大豆危机是非常重要的危机,接下来我们就看看美国政府和华尔街是如何搞这场阴谋的。2003年8月份,美国农业部说天气不好,所以大豆库存数据要调低–美国农产品生产配额是由美国农业部决定的。大豆库存量降低那还得了,于是美国的金融炒家就开始大量建仓,因为美国政府不买了。怎么建仓呢?芝加哥期货交易所的大豆交易价格从2003年8月份的最低点540美分一路涨到了2004年4月份的1 060美分,涨得非常快。

因为美国政府要求美国的大豆产量降低,导致大豆价格从540美分涨到了1 060美分,创下了2003年之前30年的新高。这样的涨幅换做在中国的话,相当于每吨大豆从2 300元涨到4 400元,就是这么快。你知不知道这都是阴谋?第一,农业部为什么要调低大豆的产量?第二,国际金融炒家为什么在这个时候拉抬大豆的价格,而且拉抬得这么快?它们的目的是什么呢?就是让中国70%的大豆压榨工厂全部破产。由于中国压榨企业的恐慌心理,于2004年3月在一吨4 300元的历史高价下,抢购了800多万吨大豆。

由于大豆价格大跌,结果损失惨重,有70%的压榨企业破产出局,大量企业倒闭,而在这个时候,你们知不知道有国际四大粮商这个说法呢?很多人可能不知道。

在全世界控制着粮食生产运销的只有四家公司,它们趁机低价收购中国破产的压榨企业,参股多家大豆压榨企业。世界四大粮商进场收购了我国70%以上的停工企业,从此中国的大豆市场受制于四大粮商,而四大粮商和美国政府以及华尔街之间关系暧昧,在此得到了完全的证实。

我上面提到的问题,不是一两句话能说完的,为了大家能更清楚的了解整个事情的经历,我建议大家读一下下面几本书。大家在读完之后,仔细想想一下,华尔街为什么能兴风作浪。

1、拉吉.帕特尔《粮食战争:市场、权力和世界食物体系的隐形战争》:目前国内讲食品问题及四大粮商的书很多,这是最全面的一本。如果要了解金融炒家在相关领域如何兴风作浪,同时参考我的著作《金融超限战》。

2、科林.里德《金融危机经济学:如何避免下一次经济危机》:未来的社会,有危机是常态,没危机就太幸福了,这次危机还没过,看点,有备无患吧。

3、肯.布兰佳《更高层面的领导》:肯.布兰佳在管理界,也算一号人物,本书是其集大成之作,在领导力方面具有很强的实操性。最近很多企业界老总听了我的讲座,希望为他的管理人员推荐一本取之即用的书,又体现了我在《谁在谋杀中国经济》所说的文化浮躁性,但基于其好学精神,我的助手找了几本,姑且认为这一本不错。

4、斯蒂芬.李柏《即将来临的经济崩溃》:这是一本在2008年销售异常火爆的一本书,作者拥有19年的专业股市预测经历,当然,他是有成功预测过的,比如成功预测了 20世纪90年代将是股市的黄金时期;科技股市场的崩溃即将来临;在2004年2月,当原油价格还在每桶33美元以下徘徊的时候,他又预言能源价格飞速上涨已经为时不远。但推荐给大家看的不是他关于股市的预测,而是他关于投资背后的理解。

财经 ,

DirectSound应用程序开发快速入门

2009年11月16日
DirectSound应用程序开发快速入门已关闭评论

摘要:DirectSound编程的入门介绍,通过实例讲解了如何利用DirectSound最基本的功能—–播放音频,并提供了DirectSound播放音频文件的两种方式(Static buffer 和Streaming buffer ),

关键词: Directsound stream buffer ,static buffer wave 文件播放

一、配置DirectDounf的开发环境

在进行DirectSound开发之前,一定要设置好开发环境,否则编译时会提示你很多东西都找不到定义,DirectSound的开发环境很好设置,简单的说就是包含一些头文件,将lib文件添加要工程中。仅仅包含dsound.h肯定是不够的,一般来说,在你的工程中包含下面两个文件就够了。
 

#include <mmsystem.h>
#include <dsound.h>

如果你还想使用Dsound的API的话,那么你就要在你的vc开发环境中添加Dsound..lib库,如果你的程序还提示有很多的外部链接找不到,那么我建议你可以将下面的库都添加到你的工程中comctl32.lib dxerr9.lib winmm.lib dsound.lib dxguid.lib odbc32.lib odbccp32.lib,这些是我从Dsound提供的例子中得到的,肯定够你用的,如下图

开发环境配置好了。你可以在你的工程中任意使用DirectSound提供的接口和函数了。下面简单介绍DirectSound开发中要用到的对象。

二、DiectDound几个对象

我们首先学习一下Directsound中常用的几个对象,简单学习一下哦DirectSound其实很简单的,主要有下面常用的几个对象。
 

对象 数量 作用 主要接口
设备对象 每个应用程序只有一个设备对象 用来管理设备,创建辅助缓冲区 IDirectSound8
辅助缓冲区对象 每一个声音对应一个辅助缓冲区,可以有多个辅助缓冲区 用来管理一个静态的或者动态的声音流,然后在主缓冲区中混音 IDirectSoundBuffer8,
IDirectSound3DBuffer8,
IDirectSoundNotify8
主缓冲区对象 一个应用程序只有一个主缓冲区 将辅助缓冲区的数据进行混音,并且控制3D参数. IDirectSoundBuffer, IDirectSound3DListener8
特技对象 没有 来辅助缓冲的声音数据进行处理 8个特技接口IDirectSoundFXChorus8

首先,要创建一个设备对象,然后通过设备对象创建缓冲区对象。辅助缓冲区由应用程序创建和管理,DirectSound会自动地创建和管理主缓冲区,一般来说,应用程序即使没有获取这个主缓冲区对象的接口也可以播放音频数据,但是,如果应用程序要想得到IDirectSound3DListener8接口,就必须要自己创建一个主缓冲区。

三、播放音频文件开发的基本流程

下面我们简单的来学习一下如果通过Directsound的API播放声音,既然是breif overview,那么详细的内容你可以参考下面的一节内容,这里只是简单的介绍一下播放声音的步骤。

第一步,创建一个设备对象,设置设备对象的协作度。

在你的代码中你可以通过调用DirectSoundCreat8函数来创建一个支持IDirectSound8接口的对象,这个对象通常代表缺省的播放设备。当然你可以枚举可用的设备,然后将设备的GUID传递给DirectSoundCreat8函数。

如果没有声音输出设备,这个函数就返回error,或者,在VXD驱动程序下,如果声音输出设备正被某个应用程序通过waveform格式的api函数所控制,该函数也返回error。

下面是创建对象的代码,及其简单

LPDIRECTSOUND8 lpDirectSound;
HRESULT hr = DirectSoundCreate8(NULL, & lpDirectSound, NULL));

注意,Directsound虽然基于COM,但是你并不需要初始化com库,这些Directsound都帮你做好了,当然,如果你使用DMOs特技,你就要自己初始化com库了,切记。

因为Windows是一个多任务操作环境,在同一个时刻有可能多个应用程序共用同一个设备,通过协作水平,DirectX就可以保证这些应用程序在访问设备的时候不会冲突,每个Directsound应用程序都有一个协作度,用来确定来接近设备的程度,当你创建完设备对象后,一定要调用IDirectSound8::SetCooperativeLevel来设置协作度,否则,你不会听到声音的。

HRESULT hr = lpDirectSound->SetCooperativeLevel(hwnd, DSSCL_PRIORITY);
if (FAILED(hr))
{
ErrorHandler(hr); // Add error-handling here.
}

第二步,创建一个辅助Buffer,也叫后备缓冲区

你可以通过IDirectSound8::CreateSoundBuffer来创建buffer对象,这个对象主要用来获取处理数据,这种buffer称作辅助缓冲区,以和主缓冲区区别开来,Direcsound通过把几个后备缓冲区的声音混合到主缓冲区中,然后输出到声音输出设备上,达到混音的效果。

第三步,获取PCM类型的数据

将WAV文件或者其他资源的数据读取到缓冲区中。

第四步,将数据读取到缓冲区

你可以通过 IDirectSoundBuffer8::Lock.方法来准备一个辅助缓冲区来进行写操作,通常这个方法返回一个内存地址,见数据从你的私人buffer中复制到这个地址中,然后调用IDirectSoundBuffer8::Unlock.

第五步,播放缓冲区中的数据

你可以通过IDirectSoundBuffer8::Play方法来播放缓冲区中的音频数据,你可以通过IDirectSoundBuffer8::Stop来暂停播放数据,你可以反复的莱停止,播放,音频数据,如果你同时创建了几个buffer,那么你就可以同时来播放这些数据,这些声音会自动进行混音的。

你可以通过IDirectSoundBuffer8::GetVolume and IDirectSoundBuffer8::SetVolume函数来获取或者设置正在播放的音频的音量的大小。

如果设置主缓冲区的音量就会改变声卡的音频的声量大小。音量的大小,用分贝来表示,一般没法来增强缺省的音量,这里要提示一下,分贝的增减不是线形的,减少3分贝相当于减少1/2的能量。最大值衰减100分贝几乎听不到了。

通过IDirectSoundBuffer8::GetFrequency and IDirectSoundBuffer8::SetFrequency方法可以获取设置音频播放的频率,主缓冲区的频率不允许改动,通过 IDirectSoundBuffer8::GetPan and IDirectSoundBuffer8::SetPan函数可以设置音频在左右声道播放的位置,具有3D特性的缓冲区没法调整声道。

 

 

  四、使用静态的缓冲区

如果我们的wave文件不是很大,那么我们就可以使用静态的缓冲区了。

包含全部音频数据的缓冲区我们称为静态的缓冲区,尽管,不同的声音可能会反复使用同一个内存buffer,但严格来说,静态缓冲区的数据只写入一次。

静态缓冲区的创建和管理和流缓冲区很相似,唯一的区别就是它们使用的方式不一样,静态缓冲区只填充一次数据,然后就可以play,然而,流缓冲区是一边play,一边填充数据。

给静态缓冲区加载数据分下面几个步骤

1、调用IDirectSoundBuffer8::Lock函数来锁定所有的内存,你要指定你锁定内存中你开始写入数据的偏移位置,并且取回该偏移位置的地址。

2、采用标准的数据copy方法,将音频数据复制到返回的地址。

3、调用IDirectSoundBuffer8::Unlock.,解锁该地址。

下面我给出使用static buffer 播放wav文件的完整代码,首先定义我们需要的一些对象:

LPDIRECTSOUNDBUFFER8 g_pDSBuffer8 = NULL; //buffer
LPDIRECTSOUND8 g_pDsd = NULL; //dsound
CWaveFile *g_pWaveFile= NULL;
//下面初始化DirectSound工作。
HRESULT hr;
if(FAILED(hr = DirectSoundCreate8(NULL,&g_pDsd,NULL)))
return FALSE;
//设置设备的协作度
if(FAILED(hr = g_pDsd->SetCooperativeLevel(m_hWnd,DSSCL_PRIORITY)))
return FALSE;

g_pWaveFile = new CWaveFile;
g_pWaveFile->Open(_T("d:\\test.wav"),NULL,WAVEFILE_READ);
DSBUFFERDESC dsbd;
ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
dsbd.dwSize = sizeof(DSBUFFERDESC);
dsbd.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLFX| DSBCAPS_CTRLPOSITIONNOTIFY |DSBCAPS_GETCURRENTPOSITION2;
dsbd.dwBufferBytes = g_pWaveFile->GetSize();//MAX_AUDIO_BUF * BUFFERNOTIFYSIZE ;
dsbd.lpwfxFormat = g_pWaveFile->m_pwfx;
LPDIRECTSOUNDBUFFER lpbuffer;
//创建辅助缓冲区对象
if(FAILED(hr = g_pDsd->CreateSoundBuffer(&dsbd,&lpbuffer,NULL)))
return ;
if( FAILED( hr = lpbuffer->QueryInterface( IID_IDirectSoundBuffer8, (LPVOID*) &g_pDSBuffer8) ) )
return ;
lpbuffer->Release();
//准备工作做完了,下面就开始播放了
LPVOID lplockbuf;
DWORD len;
DWORD dwWrite;

g_pDSBuffer8->Lock(0,0,&lplockbuf,&len,NULL,NULL,DSBLOCK_ENTIREBUFFER);
g_pWaveFile->Read((BYTE*)lplockbuf,len,&dwWrite);
g_pDSBuffer8->Unlock(lplockbuf,len,NULL,0);
g_pDSBuffer8->SetCurrentPosition(0);
g_pDSBuffer8->Play(0,0,DSBPLAY_LOOPING);

五、使用流缓冲区播放超大型的wave文件

流缓冲区用来播放那些比较长的音频文件,因为数据比较长,没法一次填充到缓冲区中,一边播放,一边将新的数据填充到DirectSound的缓冲区中。

可以通过IDirectSoundBuffer8::Play函授来播放缓冲区中的内容,注意在该函数的参数中一定要设置DSBPLAY_LOOPING标志。

通过IDirectSoundBuffer8::Stop方法中断播放,该方法会立即停止缓冲区播放,因此你要确保所有的数据都被播放,你可以通过拖动播放位置或者设置通知位置来实现。

将音频流倒入缓冲区需要下面三个步骤

1、确保你的缓冲区已经做好接收新数据的准备。你可以拖放播放的光标位置或者等待通知

2、调用IDirectSoundBuffer8::Lock.函数锁住缓冲区的位置,这个函数返回一个或者两个可以写入数据的地址

3、使用标准的copy数据的方法将音频数据写入缓冲区中

4、IDirectSoundBuffer8::Unlock.,解锁

这里我要讲一下DirectSound的通知机制。因为Stream buffer 大小只够容纳一部分数据,因此,在播放完缓冲区中的数据后,DirectSound就会通知应用程序,将新的数据填充到DirectSound的缓冲区中。假如我们设置DirectSound的buffersize 为1920*4,如下图

我们可以给DirectSound设置一个事件,并且设置buffer通知大小,如下:

HANDLE g_event[MAX_AUDIO_BUF];
for(int i =0; i< MAX_AUDIO_BUF;i++)
{
g_aPosNotify[i].dwOffset = i* BUFFERNOTIFYSIZE ;
g_aPosNotify[i].hEventNotify = g_event[i];
}
if(FAILED(hr = g_pDSBuffer8->QueryInterface(IID_IDirectSoundNotify,(LPVOID *) &g_pDSNotify )))
return ;
g_pDSNotify->SetNotificationPositions(MAX_AUDIO_BUF,g_aPosNotify);
g_pDSNotify->Release();

当DirectSound播放到buffer的1920,3840,5760,7680等位置时,Directsound就会通知应用程序,将g_ event,设置为通知态,应用程序就可以通过WaitForMultipleObjects 函数等待DirectSound的通知,将数据填充到DirectSoun的辅助缓冲区。

下面我给出Stream buffer 播放wave文件的代码。

#define MAX_AUDIO_BUF 4
#define BUFFERNOTIFYSIZE 1920
LPDIRECTSOUNDBUFFER8 g_pDSBuffer8 = NULL; //buffer
LPDIRECTSOUND8 g_pDsd = NULL; //dsound
CWaveFile *g_pWaveFile= NULL;
BOOL g_bPlaying = FALSE; //是否正在播放
LPDIRECTSOUNDNOTIFY8 g_pDSNotify = NULL;
DSBPOSITIONNOTIFY g_aPosNotify[MAX_AUDIO_BUF];//设置通知标志的数组
HANDLE g_event[MAX_AUDIO_BUF];
DWORD g_dwNextWriteOffset = 0;

//初始化DirectSound
HRESULT hr;
if(FAILED(hr = DirectSoundCreate8(NULL,&g_pDsd,NULL)))
return FALSE;
if(FAILED(hr = g_pDsd->SetCooperativeLevel(m_hWnd,DSSCL_PRIORITY)))
return FALSE;

g_pWaveFile = new CWaveFile;
g_pWaveFile->Open(_T("d:\\test.wav"),NULL,WAVEFILE_READ);

DSBUFFERDESC dsbd;
ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
dsbd.dwSize = sizeof(DSBUFFERDESC);
dsbd.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_CTRLPOSITIONNOTIFY |DSBCAPS_GETCURRENTPOSITION2;
dsbd.dwBufferBytes = MAX_AUDIO_BUF * BUFFERNOTIFYSIZE ;
dsbd.lpwfxFormat = g_pWaveFile->m_pwfx;
LPDIRECTSOUNDBUFFER lpbuffer;
//创建DirectSound辅助缓冲区
if(FAILED(hr = g_pDsd->CreateSoundBuffer(&dsbd,&lpbuffer,NULL)))
return FALSE;
if( FAILED( hr = lpbuffer->QueryInterface( IID_IDirectSoundBuffer8, (LPVOID*) &g_pDSBuffer8) ) )
return FALSE;
lpbuffer->Release();
//设置DirectSound通知 机制
for(int i =0; i< MAX_AUDIO_BUF;i++)
{
g_aPosNotify[i].dwOffset = i* BUFFERNOTIFYSIZE ;
g_aPosNotify[i].hEventNotify = g_event[i];
}
if(FAILED(hr=g_pDSBuffer8->QueryInterface(IID_IDirectSoundNotify,(LPVOID*) g_pDSNotify )))
return ;
g_pDSNotify->SetNotificationPositions(MAX_AUDIO_BUF,g_aPosNotify);
g_pDSNotify->Release();
ok,在下面的play函数中,我们就要单独启动一个线程,来播放了
void OnBnClickedButtonPlay()
{
g_bPlaying =TRUE;
g_pWaveFile->ResetFile();
CreateThread(0,0,PlayThread,this,NULL,NULL);
}
//停止播放音频
void CDsoundEffectDemoDlg::OnBnClickedButtonStop()
{
// TODO: 在此添加控件通知处理程序代码
g_bPlaying =FALSE;
Sleep(500);
g_pDSBuffer8->Stop();
}

下面我们看看我们的播放线程,在线程里,我们首先将音频数据填充到DirectSound的辅助缓冲区中,然后调用DirectSound buffer 的play方法,开始播放,然后就在WaitForMultipleObjects 等待DirectSound的通知吧,然后读取wave文件将数据填充到DirectSound的空buffer中。

DWORD WINAPI PlayThread(LPVOID lpParame)
{
DWORD res;
LPVOID lplockbuf;
DWORD len;
DWORD dwWrite;

g_pDSBuffer8->Lock(0,0,&lplockbuf,&len,NULL,NULL,DSBLOCK_ENTIREBUFFER);
g_pWaveFile->Read((BYTE*)lplockbuf,len,&dwWrite);
g_pDSBuffer8->Unlock(lplockbuf,len,NULL,0);
g_pDSBuffer8->SetCurrentPosition(0);
g_pDSBuffer8->Play(0,0,DSBPLAY_LOOPING);
g_dwNextWriteOffset = 0;
while(g_bPlaying)
{
res = WaitForMultipleObjects (MAX_AUDIO_BUF, g_event, FALSE, INFINITE);
if(res > WAIT_OBJECT_0)
ProcessBuffer();
}

return 0;
}

下面的函数主要是给空的DirectSound缓冲区填充 音频数据。

void ProcessBuffer()
{
DWORD dwBytesWrittenToBuffer = 0;
VOID* pDSLockedBuffer = NULL;
VOID* pDSLockedBuffer2 = NULL;
DWORD dwDSLockedBufferSize;
DWORD dwDSLockedBufferSize2;
HRESULT hr;
g_pDSBuffer8->Lock(g_dwNextWriteOffset,BUFFERNOTIFYSIZE,&pDSLockedBuffer,&dwDSLockedBufferSize, &pDSLockedBuffer2,&dwDSLockedBufferSize2,0);
if(hr == DSERR_BUFFERLOST)
{
g_pDSBuffer8->Restore();
g_pDSBuffer8->Lock(g_dwNextWriteOffset,BUFFERNOTIFYSIZE,&pDSLockedBuffer,&dwDSLockedBufferSize,
&pDSLockedBuffer2,&dwDSLockedBufferSize2,0);
}
if(SUCCEEDED(hr))
{
//write
g_pWaveFile->Read((BYTE*)pDSLockedBuffer,dwDSLockedBufferSize,&dwBytesWrittenToBuffer);
g_dwNextWriteOffset += dwBytesWrittenToBuffer;

if (NULL != pDSLockedBuffer2)
{
g_pWaveFile->Read((BYTE*)pDSLockedBuffer2,dwDSLockedBufferSize2,&dwBytesWrittenToBuffer);
g_dwNextWriteOffset += dwBytesWrittenToBuffer;
}
g_dwNextWriteOffset %= (BUFFERNOTIFYSIZE * MAX_AUDIO_BUF);

if(dwBytesWrittenToBuffer <BUFFERNOTIFYSIZE )
{
FillMemory( (BYTE*) pDSLockedBuffer + dwBytesWrittenToBuffer,
BUFFERNOTIFYSIZE – dwBytesWrittenToBuffer,
(BYTE)(g_pWaveFile->m_pwfx->wBitsPerSample == 8 ? 128 : 0 ) );

g_bPlaying = FALSE;
}
hr = g_pDSBuffer8->Unlock(pDSLockedBuffer,dwDSLockedBufferSize,
pDSLockedBuffer2,dwDSLockedBufferSize2);
}
}

六、结束语

本文介绍DirectSound开发的入门知识,开发环境的配置,并通过实例代码介绍了DirectSound播放音频文件的两种方法。

技术开发 , , ,

朝韩舰艇海上冲突 双方开火250多发舰炮

2009年11月10日
朝韩舰艇海上冲突 双方开火250多发舰炮已关闭评论

  中新网11月10日电 朝韩海军舰艇今日上午在西海的朝鲜海疆分界线─北方限界线海域交火,双方互射250多发舰炮,韩国无伤亡损失,朝鲜警备艇则着火冒烟退回朝鲜水域。

  据"中央社"报道,韩国合同参谋本部下午举行记者会指出,上午10点33分,一艘朝鲜警备艇从朝鲜长山岬附近出动,向朝鲜海疆分界线接近,驻守白翎岛的韩国海军陆战队的雷达掌握情况后,韩国海军两艘高速艇于11点22分至25分之间,对越过西海大青岛附近北方界线(NLL)南下2.2公里的朝鲜警备艇,两次广播警告,要求朝鲜警备艇立即返回朝鲜海域,但朝鲜警备艇置之不理继续南下。

  韩国联合新闻通讯社指出,合同参谋本部表示,韩国海军于11点28分至31分之间,再度发出两次警告。

  合同参谋本部指出,上午11点32分许,韩国再次表示将进行警告射击,但朝鲜警备艇继续南下,韩国因此于11点36分向朝鲜警备艇进行警告射击。

 

  朝鲜海军警备艇于11点37分向韩国海军高速艇发射50多发拟似85毫米舰炮,其中15发击中韩国高速艇左舷和掌舵室之间的船舱外壁,但未造成人员伤亡和装备损失。

  在朝鲜直接射击韩国高速艇的同时,韩国两艘高速艇也于11点37分,向朝鲜警备艇发射了200多发40毫米舰炮。

  合同参谋本部宣称,海上交火从11点37分开始,持续了2分钟,朝鲜警备艇于11点40分返回了北方界线以北的朝鲜海域。 在此交战过程中,朝鲜警备艇受到重创,甚至着火而冒出黑烟。

  合同参谋本部有关人士透露,朝鲜的损失情况未得到证实。但据悉,有一人死亡三人受伤。

  合同参谋本部并强调,此次事件是朝鲜先入侵韩国海域,韩国予以警告,并进行警告射击。韩国对此表示严重抗议,敦促朝鲜防范此类事件再次发生。

  今天朝鲜海军在西海开火交战,已是第三次,此前的两次西海海战分别发生于1999年6月15 日和2002年6月29日。

网络转载

VC.net无法打开文件”LIBC.lib”解决办法

2009年11月2日
VC.net无法打开文件”LIBC.lib”解决办法已关闭评论

问题:无法打开文件"LIBC.lib"。

解决:在"配置属性->链接器->输入->忽略特定库"后填入"LIBC.lib "。

LIBC.lib介绍

google一下,libc.lib原来是被遗弃的可怜家伙。

MSDN Labs: What”s New in Visual C++ 2005 Quote: The single-threaded CRT libraries, , msvcrt.lib, and msvcrtd.lib, . Use the multi-threaded CRT libraries. The /MD, /ML, /MT, /LD (Use Run-Time Library) compiler flag is no longer supported. Non-locking versions of some functions have been added in cases where the performance difference between the multithreaded code and the single-threaded code is potentially significant.

要解决问题的话,只要在链接设置那里忽略它就没问题了。

下面再列点抄点总结:

•Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。 C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。

•动态链接库版本:/MD Multithreaded DLL 使用导入库MSVCRT.LIB/MDd Debug Multithreaded DLL 使用导入库MSVCRTD.LIB

•静态库版本:/ML Single-Threaded 使用静态库LIBC.LIB/MLd Debug Single-Threaded 使用静态库LIBCD.LIB/MT Multithreaded 使用静态库LIBCMT.LIB/MTd Debug Multithreaded 使用静态库LIBCMTD.LIB 若要使用此运行时库请忽略这些库 单线程 (libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 多线程 (libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 使用 DLL 的多线程 (msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 调试单线程 (libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib 调试多线程 (libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib 使用 DLL 的调试多线程 (msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib

 

IT技术 ,