|
Thilek wrote: string signature_array[100];
This is not a C++/CLI array. In C++/CLI, strings are written like String^ . And array is created like
array<String^>^ stringArray = gcnew array<String^>(arrayLength) In your case, a generic List(String^) will be appropriate.
List<String^>^ stringList = gcnew List<String^>();
SQLiteConnection ^connection = gcnew SQLiteConnection("Data Source=test.db3;Pooling=True");
connection->Open();
SQLiteCommand ^cmd = gcnew SQLiteCommand(connection);
SQLiteDataReader ^reader = cmd->ExecuteReader();
while (reader->Read())
{
stringList->Add(reader->GetString(2));
}
reader->Close(); This will avoid maintaining a count variable explicitly. List is capable to expand and shrink whenever required.
For SQLiteConnection and SQLiteCommand , you can use stack semantics which will ensure the objects are disposed once the scope ends. I can't see you are disposing them in your code.
|
|
|
|
|
i try using this and i got the following errors :-
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(114) : error C2065: 'List' : undeclared identifier
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(114) : error C2275: 'System::String' : illegal use of this type as an expression
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::String'
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(114) : error C2059: syntax error : '>'
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(143) : error C2065: 'stringList' : undeclared identifier
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(143) : error C2227: left of '->Add' must point to class/struct/union/generic type
type is ''unknown-type''
Scanner.cpp
.\Scanner.cpp(114) : error C2065: 'List' : undeclared identifier
.\Scanner.cpp(114) : error C2275: 'System::String' : illegal use of this type as an expression
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::String'
.\Scanner.cpp(114) : error C2059: syntax error : '>'
.\Scanner.cpp(143) : error C2065: 'stringList' : undeclared identifier
.\Scanner.cpp(143) : error C2227: left of '->Add' must point to class/struct/union/generic type
type is ''unknown-type''
|
|
|
|
|
Thilek wrote: 'List' : undeclared identifier
Have you added using namespace System::Collections::Generic ?
|
|
|
|
|
thanks bro.. its working
|
|
|
|
|
hi..I'm getting this error message when i compile my program. Can anyone help me out to identify
what does the error means??
Thank you.
sqlite3.lib(shell.obj) : fatal error LNK1313: ijw/native module detected; cannot link with pure modules
|
|
|
|
|
Hi,
I have never seen this before, my best guess is:
it looks like you are building a managed application (C++/CLI) and you have included into your project a native code file. Native code files probably don't need to be mentioned at all in your solution pane; if you do, then their build action should be reduced to "none" or "copy to output folder" or something like that, they don't need any compilation/linking.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Luc Pattyn wrote: they don't need any compilation/linking.
In this case, OP is using a static library and it requires linking. But an application compiled with /clr:pure doesn't support linking native static libraries, I guess.
|
|
|
|
|
Looks like you are trying to link static SqlLite library to a application compiling with /clr:pure . You should try managed libraries[^] to connect to SqlLite instead. Also if possible, try to compile your application using /clr switch.
For the error message, MSDN[^] says,
The current version of Visual C++ does not support linking native or mixed managed/native (also called IJW) .obj files with .obj files compiled with /clr:pure.
|
|
|
|
|
Hi Guys,
I need to display this output as "A" in the first cell and "B" in the cell next to it but it does not seem to work as intended. It's all displayed as "A,B" in a single cell! Any idea on how to add a separator please?
Cheers.
String^ fName1 = "My File.csv";
StreamWriter^ outStream = File::CreateText(fName1);
outStream->Write("A");
outStream->Write(",");
outStream->Write("B");
outStream->NewLine;
outStream->Close();
|
|
|
|
|
When you open the file in Excel, open it as a comma delimited file and set the parse character to a comma.
|
|
|
|
|
Shouldn't that be
outStream->Write(outStream->NewLine);
Anyway, your code writes a comma separated value file. "Cells" are determined by
the consumer of the file interpretating the commas correctly. What are you using
to parse the CSV into "cells"?
The file produced by the above code opens in Excel correctly if you write the newline
correctly, without having to explicitly set the delimiter.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
Your code behaves like mine (although it is written slightly differently) and adds a new line.
Therefore the next value is written one cell below (I use Excel by the way, and I have no problems opening CSV files created with the good old C++).
What I'd like to do instead is to write the following value next to the first one along the same line.
Sorry I wasn't terribly clear in my first post.
|
|
|
|
|
The problem then is with Excel, either its settings or the version
you're using.
I tested the file produced by your code on Office Excel 2007.
The file opens fine and puts the A in one cell (column A) and the B
in another cell (column B), but only after answering the prompts to
tell excel what the delimiter is.
Then I added the code to write a newline and tested it again. Excel
opened it and placed the items in separate cells on the same row with no
prompting.
I'm not sure how you expect to fix it by writing the file differently, unless
there's some proprietary Excel CSV format.
(Note that a valid newline (either a CR or CR/LF pair) is generally required at the
end of rows in a generic CSV file)
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
Hi,
comma's within double quotes are NOT delimiters as far as CSV goes.
My guess is you have (way) too many double quotes in your output, get rid of all of them, except the ones that are meant to be there and prevent a cell to be split in halfs (in case a cell is meant to contain a comma).
If you have trouble doing this, show us your code and a sample of the output it generates.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
I was trying to answer your latest message, but it has disappeared somehow. It started like
this:
Hi Luc,
That is the problem!! The output generated by my code contains unwanted double quotes (although they are visible only when you rename the file as .txt)! Instead I'd like the output to appear as
1,2
rather than
"1,2"
.
[confused]
My code, as it appears at the beginning of the thread, is:
String^ fName1 = "My File.csv";
StreamWriter^ outStream = File::CreateText(fName1);
outStream->Write("A");
outStream->Write(",");
outStream->Write("B");
outStream->NewLine;
outStream->Close();
Here is my reply anyway:
Hi,
J_E_D_I wrote: they are visible only when you rename the file as .txt
does not make sense to me. The content of the file is independent of the file name.
J_E_D_I wrote: outStream->NewLine;
does not make sense at all, the NewLine property gets or sets something, so it is part of an expression, not a statement by itself. That line does not achieve anything, as you have been told before.
Here is a little experiment that works fine, it is C# code, I had a C# project open:
StreamWriter wr=File.CreateText(@"F:\out.txt");
wr.Write("A");
wr.Write(",");
wr.WriteLine("B");
wr.Write("A");
wr.Write(",");
wr.WriteLine("B");
wr.Close();
and it generates
A,B
A,B
without any double quotes.
Are you sober?
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Sorry Luc,
I realized I had written lots of cr*p and I tried to delete my post but unfortunately you replied before I managed to do so!
I solved the mystery however. As Mark correctly pointed out I was using the wrong syntax to add a new line without realizing it.
I was using
outStream->NewLine;
Whereas I should have used
outStream->Write(outStream->NewLine);
The "new line" instruction was ignored and I ended up with two items in the same cell using Excel.
Thanks to you all guys, problem solved!
|
|
|
|
|
Hey Luc, I pressed on "Vote to remove this message" as I thought it could be confusing for other readers and it said your message was reported for abuse! Sorry, that was not my intention!! Mmmmm, better if I take a LOOOOOONG vacation from the forum...
|
|
|
|
|
[ONSLOW VOICE]O great. There goes the neighbourhood.[/ONSLOW VOICE]
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Slightly out of topic,
C++/CLI supports stack semantics. Your code can be rewritten like
String^ fName1 = "My File.csv";
StreamWriter outStream(fName1);
outStream.Write("A");
outStream.Write(",");
outStream.Write("B");
outStream.NewLine; This will dispose the StreamWriter when the scope ends.
|
|
|
|
|
Thanks Navaneeth,
However there is an error in the new line command.
outStream.NewLine;
outStream.Write(outStream.NewLine);
Cheers.
|
|
|
|
|
Hi J_E_D_I,
put
sep=<separator symbol="">
in the very first line, then it works even with a double click.
Works well except with CRLF
regards
CBM 6502
|
|
|
|
|
Hi J_E_D_I,
put
sep=<separator symbol>
in the very first line, then it works even with a double click.
Works well except with CRLF
regards
CBM 6502
|
|
|
|
|
Hi - I've saved a System.Drawing.Image to a file stream from C# and now I'm trying to load it in Managed C++...
I have some other data that is included inbetween the bitmap data in the filestream and when I blt the surface to the backbuffer, the surface thats supposed to hold the bitmap data is entirely black. :-/
Tiles[i].Init(lpDD7);
bool Walkable = br->ReadBoolean();
MemoryStream^ ms = gcnew MemoryStream(br->ReadBytes(TILE_BITMAPSIZE));
Image^ bm = Image::FromStream(ms, true, true);
Graphics^ g = Graphics::FromImage(bm);
IntPtr^ hDC = g->GetHdc();
HDC src = static_cast<HDC>(hDC->ToPointer());
HDC dst;
Tiles[i].Walkable = Walkable;
Tiles[i].Surface->GetDC(&dst);
BitBlt(dst, 0, 0, 32, 32, src, 0, 0, SRCCOPY);
Tiles[i].Surface->ReleaseDC(dst);
Heres the INIT function
void Init(LPDIRECTDRAW7 lpDD7)
{
DDSURFACEDESC2 ddsd;
INIT_DXSTRUCT(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = 32;
ddsd.dwHeight = 32;
HRESULT hr = lpDD7->CreateSurface(&ddsd, &Surface, NULL);
}
Thanks.
|
|
|
|
|
Solved the problem...
the Bitmap class can be cast into an HBITMAP & then selected as an HDC to be copied into the surface.
Heres the fixed code:
MemoryStream^ ms = gcnew MemoryStream(br->ReadBytes(TILE_BITMAPSIZE));
Bitmap^ bm = gcnew Bitmap(Image::FromStream(ms, true, true));
HBITMAP hbm = (HBITMAP)bm->GetHbitmap().ToPointer();
HDC src = CreateCompatibleDC(NULL);
SelectObject(src, hbm);
HDC dst;
BitBlt(dst, 0, 0, Width, Height, src, 0, 0, SRCCOPY);
|
|
|
|