Eine Möglichkeit:
Man kann in .NET Sprachen COM Objekte implementieren.
Auf die kann man dann aus C++ zugreifen, weil's halt ganz normale COM Objekte sind, die bloss mit .NET implementiert werden.
geeky schrieb:
Du versuchst vermutlich den System.Web Namespace von einer Desktop-Anwendung (Windows Forms, WPF, ...) zu nutzen?
Was egal ist, solang die entsprechenden Assemblies referenziert sind, kann man alles überall nutzen.
Du hast als Targetframework nicht zufällig das Client Profile oder? Dort gibts System.Web nämlich nicht und daher gibts dann entsprechende Fehler, selbst wenn man das Assembly referenziert hat.
ich habe das Problem gelöst:
if (indize.HasAdvanceWidth)
charWidth += CalcWidth(indize.AdvanceWidth / 100, p.FontRenderingEmSize);
else charWidth += CalcWidth(g.AdvanceWidths[(ushort)indize.GlyphIndex], p.FontRenderingEmSize);
diese Variante ist schon richtig. Nur das Problem war nicht das die Abstände zwischen den Buchstaben zu klein waren sondern die Buchstaben einfach zu groß.
Nachdem ich die FontRenderingEmSize korrekt weiter gegeben habe ging es.
MfG
Vielen Dank asc! Jetzt weiß ich ein bisschen mehr, wo es sinnvoll sein könnte. Dann schaue ich jetzt mal generell wo ich überall wie skalieren werde. Vor allem bei der Tabelle erscheint es mir jetzt sehr sinnvoll.
Du musst eben mehrere Projekte su einem großen Zusammenfassen.
Einfach ein lerres Projekt und dann vorhndenen Projekte hinzufügen.
Dann hast Du alles in einem.
Du versuchst 10000 mal auf IPAddress.Any:10000 zu lauschen, es kann aber immer nur ein Socket gleichzeitig pro IP:Port Kombination lauschen.
Erstelle nur einen Socket der auf Port 10000 lauscht und erstelle Threads erst in deiner serverAcceptESAR()
Edit:
Mit TcpListener kannst du dir übrigens ein wenig Code einsparen:
TcpListener server = new TcpListener(IPAddress.Any, 10000);
server.Start(); // Auf Port 10.000 wird nun gelauscht
while(true)
{
Console.Write("Auf Verbindung eines Clients warten...");
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Jemand hat sich verbunden!!");
// Hier jetzt Thread für das client-Objekt starten ;D
}
[System.Runtime.InteropServices.Out] bar[] args
Wenn es ein Pointer ist müssstest du aber auch noch http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute verwenden. Dort dann Array angeben.
Zwergli schrieb:
Hallo,
Generic1 schrieb:
using namespaceDerDll.Classname;
Klassennamen gibt man nicht in der Using Direktive an, da gehören nur Namespaces rein.
Ist mir glatt entgangen..
Th69 schrieb:
Eine Solution (.sln) besteht aus 1 oder mehreren Projekten (.csproj und evtl. andere Projekte).
Also öffne einfach die .sln-Datei.
Besten Dank!!!!
Hi,
ich hab mich jetzt noch mal daran versucht
in meinem Beispielprojekt die c#DLL in eine separate Domain
zu laden.
Er lädt zwar die DLL aber scheint trotzdem nicht zu funktionieren
wie ich es mir erhofft hatte. Es wird scheinbar das Assembly
in die Hauptdomain geladen, da durch irgendein Grund AssemblyResolve gefeuert wird
. Wahrscheinlich muss ich mich wohl vom Gedanken verabschieden, SatellitenDLL zu verwenden und einen file-Basierten RessourcenManager anlegen.
grüße
hier der Versuch in separate Domain zu laden:
void AssemblyUtilities::testAppDomian()
{
::System::Windows::Forms::MessageBox::Show("testAppDomain");
::System::String^ directory = "c:\\externin\\";
::System::AppDomainSetup^ tAppSetup = gcnew ::System::AppDomainSetup();
tAppSetup->ApplicationName = "CsharpLibrary";
tAppSetup->ApplicationBase = directory;
tAppSetup->PrivateBinPath = directory;
tAppSetup->ShadowCopyFiles = "true";
::System::AppDomain^ tAppDomain = ::System::AppDomain::CreateDomain("LIBD", nullptr,tAppSetup);
::System::String^ pathToManagedAssembly = "c:\\externin\\cSharpDLL.dll";
if(System::IO::File::Exists(pathToManagedAssembly))
{
try
{
array<byte>^ tASMbyte;
::System::IO::FileStream^ fs = gcnew ::System::IO::FileStream(pathToManagedAssembly, ::System::IO::FileMode::Open);
int tLength = (int)fs->Length;
tASMbyte = gcnew array<byte>(tLength);
fs->Read(tASMbyte, 0, tASMbyte->Length);
fs->Close();
::System::Object^ tObj = tAppDomain->CreateInstanceAndUnwrap("cSharpDLL","cSharpDLL.Class1");
::System::Reflection::MethodInfo^ mI = tObj->GetType()->GetMethod("showFrom",::System::Reflection::BindingFlags::Public |
System::Reflection::BindingFlags::Static);
mI->Invoke(nullptr,nullptr);
}
catch(::System::Exception^e)
{
::System::Windows::Forms::MessageBox::Show(e->ToString());
}
}
}
@Doug_HH
Danke für Deine Hilfe!!
Ich habe jetzt folgende Lösung gefunden:
Anstatt einer DataTable binde ich ein DataSet an das DataGridView. Siehe da, die Zeilen werden farbig und der Spaltenindex wird richtig erkannt.
Warum das mit einem DataSet geht und mit einer DataTable weiß ich zwar nicht, aber vorerst bin ich einfach mal glücklich damit, dass ich endlich zum gewünschten Ergebnis komme.
Falls jemand eine Erklärung dafür hat, ich würde mich über eine Antwort freuen!
Danke!
sonic_1233 schrieb:
Beim meinem Projekt ist "Localizable" auf True gesetzt, und ich verwende mehrere Sprachen.
Das neue Icon muss für jede Sprache in den Properties gesetzt werden
Imho ist Localizable nicht empfehlenswert.
http://www.c-plusplus.net/forum/p2195934#2195934
Hallo,
physikus schrieb:
Mein Programm soll einige Aktionen ausführen sobald es gestartet wird. Diese gehören dann wohl unter
static void Main()
meiner Klasse
Program
.
Du kannst diese Aktionen aber auch in den Konstruktor von Form1 einfügen, und zwar direkt hinter den InitializeComponent() Aufruf ...
physikus schrieb:
Nun gibt es aber logischerweise auch Daten auf die ich in beiden Klassen zugreifen möchte.
Wie und Wo muss ich diese deklarieren, damit das möglich ist?
... womit sich diese Frage erübrigt hat.
Gruß
Michael
Hallo,
also ich habe das Programm zu laufen gebracht und die Test´s waren fehlerfrei. Vielen Dank für eure Hilfe!
asc schrieb:
Fakt ist, das nur wenige hier eine Komplettlösung präsentieren, davon lernt man nichts, aber auch gar nichts. Du musst verstehen was du falsch machst, um dies auch wirklich zu verinnerlichen. Wenn du dann an einen konkreten Problem hängst, und eine konkrete Frage (Und nicht: Macht mal das es läuft) stellst, wird dir auch geholfen.
Ich wollte ja von Anfang an nicht das mir jemand meine Arbeit macht sondern Hilfe das ich es selber schaffe. Naja lange Rede kurzer Sinn Dank eurer HIlfe und einem Buch was ich mir gestern noch zusätzlich gekauft habe funzt es jetzt.
Bin mal gespannt auf die Note. In meinem alter nochmal Noten ......