VC++ .NET - internal compiler error
От: slydiman Россия http://slydiman.narod.ru
Дата: 01.11.04 13:42
Оценка:
Microsoft Visual C++ .NET 69586-335-0000007-18784

Простейшая задача — загрузить бинарный файл в буфер и передать
этот буфер в некоторую функцию. Имя файла типа String.


                {
                    FileStream *fs = new FileStream(strFileName, IO::FileMode::Open, IO::FileAccess::Read);
                    Byte ByteArray __gc[] = new Byte __gc[(int)fs->Length];
                    unsigned char __pin *buf = &ByteArray[0];  // !!! internal error
                    int nBytesRead = fs->Read(ByteArray, 0, (int)fs->Length);
                    ExternalFunction( buf, nBytesRead );
                    fs->Close();
                }


В таком виде на последней закрывающей ся скобке компилятор выдает:

fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'f:\vs70builds\3077\vc\Compiler\Utc\src\P2\main.c', line 148)

Если закоментировать строку

unsigned char __pin *buf = &ByteArray[0];


то ошибка пропадает.

Попробовал с другой стороны:

             {
                char masFileName __gc[] = Encoding::ASCII->GetBytes(strFileName);
                char __pin *asFileName = &masFileName[0];
                int fh = open( asFileName, O_RDONLY | O_BINARY, S_IREAD );
                if( fh != -1 ){
                    int size = filelength(fh);
                    char *buf = new char[size];
                    ZeroMemory(buf,size);
                    read( fh, buf, size );
                    ExternalFunction( buf, size );
                    delete buf;
                }
                close(fh);
              }


таже ошибка, которая исчезает если закоментировать строку

char __pin *asFileName = &masFileName[0];


подскажите что-нибудь!


04.11.04 01:47: Перенесено модератором из 'C/C++' — Павел Кузнецов
04.11.04 11:28: Перенесено модератором из '.NET' — AndrewVK
Re: VC++ .NET - internal compiler error
От: catch Россия  
Дата: 01.11.04 13:48
Оценка:
Здравствуйте, slydiman, Вы писали:



S>
S>                {
S>                    FileStream *fs = new FileStream(strFileName, IO::FileMode::Open, IO::FileAccess::Read);
S>                    Byte ByteArray __gc[] = new Byte __gc[(int)fs->Length];
S>                    unsigned char __pin *buf = &ByteArray[0];  // !!! internal error
S>                    int nBytesRead = fs->Read(ByteArray, 0, (int)fs->Length);
S>                    ExternalFunction( buf, nBytesRead );
                    fs->>Close();
S>                }
S>



Может, нужно объявить так:
                {
                    ,,,
                    unsigned char __pin *buf = ByteArray[0];
                    ,,,
                }
Re: VC++ .NET - internal compiler error
От: Евгений Коробко  
Дата: 02.11.04 05:53
Оценка:
А полную перекомпиляцию пробовали?
Posted via RSDN NNTP Server 1.9 gamma
Евгений Коробко
Re[2]: VC++ .NET - internal compiler error
От: slydiman Россия http://slydiman.narod.ru
Дата: 03.11.04 10:28
Оценка:
>А полную перекомпиляцию пробовали?

Конечно, никакой rebuild не помогает, даже с полной чисткой и на другой машине.
Re: String в char * как?
От: slydiman Россия http://slydiman.narod.ru
Дата: 03.11.04 12:21
Оценка:
недавно писал на Managed C++ библиотечку для ASP.NET, там был код вида

BYTE bPixels[720*576];

на WinXP все прекрасно работало, на Win2003 Server вываливалось с руганью на стэк
тогда я заменил вот на это:

Byte tempBytes __gc[] = new Byte __gc [720*576]; // Create managed array of Byte's
BYTE __pin *bPixels = &(tempBytes[0]); // Pin managed array and copy memory

все прекрасно работает до сих пор

но вот что делать с чтением из бинарного файла?
предложите хотя бы кто-нибудь простой способ перевода String в char *
Re: VC++ .NET - internal compiler error
От: vdimas Россия  
Дата: 03.11.04 17:37
Оценка:
Здравствуйте, slydiman, Вы писали:

а так:
unsigned char __pin *buf = ByteArray;

насколько я знаю, нельзя вызывать __pin на элементы массивов,
можно только на массив.
Re: VC++ .NET - internal compiler error
От: AlexZu Россия  
Дата: 04.11.04 08:00
Оценка:
Здравствуйте, slydiman, Вы писали:

S>Microsoft Visual C++ .NET 69586-335-0000007-18784


S>
S>                {
S>                    FileStream *fs = new FileStream(strFileName, IO::FileMode::Open, IO::FileAccess::Read);
S>                    Byte ByteArray __gc[] = new Byte __gc[(int)fs->Length];
S>                    unsigned char __pin *buf = &ByteArray[0];  // !!! internal error
S>                    int nBytesRead = fs->Read(ByteArray, 0, (int)fs->Length);
S>                    ExternalFunction( buf, nBytesRead );
                    fs->>Close();
S>                }
S>


S>В таком виде на последней закрывающей ся скобке компилятор выдает:


S>fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'f:\vs70builds\3077\vc\Compiler\Utc\src\P2\main.c', line 148)


Похоже на баг компилятора, в Microsoft Visual C++ .NET 69586-335-0000007-18439 компилится нормально.
Re[2]: String в char * как?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 04.11.04 09:48
Оценка:
S>предложите хотя бы кто-нибудь простой способ перевода String в char *

Marshal.StringToCoTaskMemAnsi
Marshal.StringToHGlobalAnsi
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.