Fehler!
Zitat:
System.AccessViolationException was unhandled
HResult=-2147467261
Message=Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Der Fehler tritt nur in CSharp auf.
C#
Code:
[Serializable, StructLayout(LayoutKind.Sequential)]
public sealed class BASSVIS_INFO
{
[MarshalAs(UnmanagedType.LPStr)]
public string SongTitle = string.Empty;
[MarshalAs(UnmanagedType.LPStr)]
public string SongFile = string.Empty;
public int Position;
public int PlaylistPos = 1;
public int PlaylistLen = 1;
public int SampleRate = 0xac44;
public int BitRate = 0x100;
public int Duration;
public int Channels = 2;
public BASSVIS_INFO(string songtitle, string filename)
{
}
}
Code:
//BASSVIS_SetInfo
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_SetInfo", CharSet = CharSet.Auto)]
public static extern bool BASSVIS_SetInfo(BASSVIS_PARAM param, BASSVIS_INFO info);
Code:
if ((_visParam.VisHandle != 0) & (BassVisTest.MainWindow._streamFile != ""))
BassVis.BASSVIS_SetInfo(_visParam, _mediaInfo);
Delphi-Quellcode:
procedure TBassWMPVisAPI.WMPVIS_SetMediaInfo(Channels: integer; SampleRate: integer;
Title: PAnsiChar; FileName: PAnsiChar); stdcall;
var
WMPMedia: IWMPMedia;
begin
if RenderFromDevice then
Title := 'BassVis - BrewIdeas©Emil Weiss';
if OldMedia <> WideString(FileName) then
begin
if FileExists(string(FileName)) then
begin
OldMedia := WideString(FileName);
BassWMPVis1.FStreamInfo.SampleRate := SampleRate;
BassWMPVis1.FStreamInfo.Channels := Channels;
BassWMPVis1.FStreamInfo.Title := WideString(Title);
BassWMPVis1.FStreamInfo.FileName := FileName;
WMPHelper.MediaInfo(Channels, SampleRate, WideString(Title));
Liegt hier ein Konvertierungs Problem zwischen PAnsiChar und WideString vor?
Oder woher kommt der Fehler.
Es kracht hier..
Delphi-Quellcode:
function TWMPHelper.NotifyNewMedia(pMedia: IWMPMedia): Bool;
begin
Result := False;
try
EnterCriticalSection(CritSect);
if Assigned(_IWmpEffects2) then
if _IWmpEffects2.NotifyNewMedia(pMedia) = S_OK then //<<<<< Problem nur in C#
Result := True;
finally
LeaveCriticalSection(CritSect);
end;
end;
gruss